Skip to content

权限控制

宗主、峰主、弟子三级身份,LLM 自动感知权限边界,越权操作运行时拦截。

身份体系

身份权限范围典型操作
宗主全宗门删除修士、管理所有峰
峰主本峰新增/修改本峰弟子、调整灵石
弟子仅自己查询自己信息、接任务、兑换功法

运行时权限检查

在工具方法内直接检查,使用 XiuxianAgentContext.hasPermission()

java
@Tool(description = "调整修士的灵石或贡献点余额")
public String adjustAssets(..., ToolContext toolContext) {
    XiuxianAgentContext ctx = XiuxianAgentContext.fromToolContext(toolContext);
    if (ctx != null && !ctx.hasPermission(XiuxianRole.PEAK_MASTER)) {
        return error("权限不足:调整资产需要峰主及以上权限");
    }
    // 执行业务逻辑
}

hasPermission() 实现:

java
public boolean hasPermission(XiuxianRole requiredRole) {
    return switch (requiredRole) {
        case DISCIPLE -> true;                        // 所有人
        case PEAK_MASTER -> role == SECT_MASTER || role == PEAK_MASTER;
        case SECT_MASTER -> role == SECT_MASTER;      // 仅宗主
    };
}

双重保障

System Prompt 层

XiuxianAgentService.buildUserInfo() 在 System Prompt 中注入当前用户身份和权限说明:

当前用户身份:**玄清子/宗主**
身份说明:全宗门最高权限
修士姓名:玄清子
境界:金丹期 后期

**权限说明**:
- 可查询全宗门弟子的所有信息(包括敏感信息)
- 可管理全宗门弟子

LLM 根据这些信息自然避免越权操作,生成符合身份的回复。

运行时层

即使 LLM 仍尝试越权调用,hasPermission() 在工具执行时拦截。LLM 收到错误响应后,会用修仙世界的语气告知用户:

抱歉,删除修士需要宗主权限。您目前是弟子身份,请联系宗主处理。

数据权限 — 峰主自动过滤

峰主只能操作本峰弟子,通过 checkPeakPermission() 检查:

java
String err = checkPeakPermission(user, "管理", ctx);
if (err != null) return error(err);
// "权限不足:您只能管理本峰弟子,【张三】属于其他峰"

峰主查询时,建议在工具逻辑中通过 ctx.getPeakId() 自动过滤只查本峰数据。

权限矩阵

工具最低权限说明
queryUserBasic弟子基本信息
queryUserDetail峰主详细信息(含灵石)
manageUser峰主新增/修改
deleteUser宗主删除
adjustAssets峰主调整灵石/贡献点
exchangeManual弟子兑换功法
deleteResource宗主删除资源

下一步