fix(权限管理): 增强权限检查的类型安全并修复权限引用

修复权限检查中可能传入非Permission类型导致的错误,将echo插件的权限引用从MessageEvent.ADMIN迁移到Permission.ADMIN
This commit is contained in:
2026-01-19 14:21:46 +08:00
parent 8505f5ff11
commit 081401c54e
2 changed files with 8 additions and 1 deletions

View File

@@ -152,6 +152,12 @@ class PermissionManager(Singleton):
检查用户是否具有指定权限级别 检查用户是否具有指定权限级别
""" """
user_permission = await self.get_user_permission(user_id) user_permission = await self.get_user_permission(user_id)
# 增强类型检查防止将property对象等错误类型传递进来
if not isinstance(required_permission, Permission):
logger.error(f"权限检查失败required_permission 不是 Permission 枚举类型,而是 {type(required_permission).__name__}")
return False
return user_permission >= required_permission return user_permission >= required_permission
async def get_all_user_permissions(self) -> Dict[str, str]: async def get_all_user_permissions(self) -> Dict[str, str]:

View File

@@ -6,6 +6,7 @@ Echo 与交互插件
from core.managers.command_manager import matcher from core.managers.command_manager import matcher
from core.bot import Bot from core.bot import Bot
from models.events.message import MessageEvent from models.events.message import MessageEvent
from core.permission import Permission
__plugin_meta__ = { __plugin_meta__ = {
"name": "echo", "name": "echo",
@@ -13,7 +14,7 @@ __plugin_meta__ = {
"usage": "/echo [内容] - 复读内容\n/赞我 - 让机器人给你点赞", "usage": "/echo [内容] - 复读内容\n/赞我 - 让机器人给你点赞",
} }
@matcher.command("echo",permission=MessageEvent.ADMIN) @matcher.command("echo", permission=Permission.ADMIN)
async def handle_echo(bot: Bot, event: MessageEvent, args: list[str]): async def handle_echo(bot: Bot, event: MessageEvent, args: list[str]):
""" """
处理 echo 指令,原样回复用户输入的内容 处理 echo 指令,原样回复用户输入的内容