feat(plugin-system): 引入插件权限节点声明式注册机制,解决了issue#24

重构了插件权限节点的注册方式,从原先在 `on_plugin_loaded` 钩子中调用 API 的命令式注册,改为通过在插件类中声明 `permission_nodes` 列表的声明式注册。

这一改进有以下优点:
- **简化插件开发**:插件开发者不再需要在代码中手动调用注册函数,只需在类属性中定义权限节点即可,更加直观和简洁。
- **提升核心健壮性**:权限节点的注册逻辑统一由插件管理器在加载时处理,减少了因插件实现不当导致注册失败或遗漏的风险。
- **增强可读性**:所有权限节点集中定义在插件类的顶部,方便快速了解插件所需的权限。

此变更涉及:
- 新增 `PermissionNodeField` 类型用于标准化权限节点定义。
- 在 `PluginBase` 中添加 `permission_nodes` 属性。
- 在 `PluginManager` 中实现插件加载时自动注册权限节点的逻辑。
- 更新 `maizone_refactored` 和 `permission_management` 插件以适应新的声明式注册方式。
This commit is contained in:
minecraft1024a
2025-10-06 13:26:24 +08:00
parent a2b0dd768a
commit b7a255c4ae
6 changed files with 55 additions and 21 deletions

View File

@@ -10,6 +10,7 @@ import toml
from src.common.logger import get_logger
from src.config.config import CONFIG_DIR
from src.plugin_system.base.component_types import (
PermissionNodeField,
PluginInfo,
PythonDependency,
)
@@ -34,6 +35,8 @@ class PluginBase(ABC):
config_schema: dict[str, dict[str, ConfigField] | str] = {}
permission_nodes: list["PermissionNodeField"] = []
config_section_descriptions: dict[str, str] = {}
def __init__(self, plugin_dir: str, metadata: PluginMetadata):