Skip to main content
Glama

FastGPT Knowledge Base MCP

by boleyn
permission_service.py3.84 kB
""" 权限服务模块 提供用户权限验证和数据集访问控制功能 """ from typing import List, Set from ..config import config from ..logger import server_logger class PermissionService: """权限管理服务""" def __init__(self): self.config = config def is_special_user(self, userid: str) -> bool: """检查是否为特殊用户""" return self.config.is_special_user(userid) def has_dataset_access(self, userid: str, dataset_id: str) -> bool: """检查用户是否有权限访问指定数据集""" return self.config.has_dataset_access(userid, dataset_id) def filter_allowed_datasets(self, userid: str, dataset_ids: List[str]) -> List[str]: """ 过滤用户有权限访问的数据集列表 Args: userid: 用户ID dataset_ids: 数据集ID列表 Returns: 过滤后的数据集ID列表 """ allowed_datasets = [] for dataset_id in dataset_ids: if self.has_dataset_access(userid, dataset_id): allowed_datasets.append(dataset_id) else: server_logger.info(f"用户 {userid} 无权限访问受限数据集: {dataset_id}") return allowed_datasets def filter_dataset_nodes(self, userid: str, nodes: List) -> List: """ 过滤数据集节点列表,移除无权限访问的受限数据集 Args: userid: 用户ID nodes: 数据集节点列表 Returns: 过滤后的节点列表 """ if not nodes: return nodes filtered_nodes = [] restricted_count = 0 for node in nodes: # 检查是否为数据集类型且是受限数据集 if hasattr(node, 'type') and node.type == 'dataset': if hasattr(node, 'id') and node.id in self.config.restricted_datasets: # 是受限数据集,检查用户权限 if not self.is_special_user(userid): restricted_count += 1 server_logger.info(f"过滤受限数据集: {node.id[:8]}... (用户 {userid} 无权限)") continue filtered_nodes.append(node) if restricted_count > 0: server_logger.info(f"权限过滤完成: 过滤了 {restricted_count} 个受限数据集") return filtered_nodes def check_dataset_permission(self, userid: str, dataset_id: str) -> bool: """检查数据集权限(装饰器使用)""" return self.has_dataset_access(userid, dataset_id) def check_tool_permission(self, userid: str, tool_name: str) -> bool: """检查工具权限(装饰器使用)""" # 目前所有工具都允许访问,主要通过数据集权限控制 return True def validate_search_limit(self, userid: str, limit: int) -> int: """验证搜索限制(装饰器使用)""" # 特殊用户无限制,普通用户最多50条 if self.is_special_user(userid): return limit else: return min(limit, 50) def can_view_collections(self, userid: str) -> bool: """检查是否可以查看集合内容(装饰器使用)""" return True def can_explore_folders(self, userid: str) -> bool: """检查是否可以探索文件夹(装饰器使用)""" return True def get_user_role(self, userid: str) -> str: """获取用户角色""" return self.config.get_user_role(userid) # 创建全局权限服务实例 permission_service = PermissionService()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/boleyn/fastgpt-dataset-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server