useKnowledgeGraphPermissions
约 706 字大约 2 分钟
2025-08-29
简介
用于知识图谱的权限判定组合式函数。根据用户角色与上下文(是否为授课教师、是否已选课)计算可视与可编辑能力,输出只读的权限对象与显式的计算函数,便于外部在不同时机进行权限重算。
接口定义
从 @/types 导入的类型(以代码为准):
KnowledgeGraphUserRole:用户角色枚举,支持admin、teacher、student、guest等UserPermissions:权限结果对象,包含以下布尔字段:canViewcanEditcanEditNodescanEditRelationscanAddNodescanDeleteNodescanAddRelationscanDeleteRelations
函数签名
export function useKnowledgeGraphPermissions(
userRole: KnowledgeGraphUserRole,
isEnrolled = false,
isInstructor = false
) {
// 返回值见下节
}参数说明:
userRole:当前用户角色isEnrolled:是否为选课学生(影响student的可见权限)isInstructor:是否为该课程授课教师(影响teacher的编辑权限)
权限矩阵(按角色与上下文)
以下为当前实现逻辑的概括,真实行为以源代码为准。
admincanView = true- 其余编辑相关权限均为
false(管理员仅查看,不参与编辑)
teachercanView = true- 若
isInstructor = true:所有编辑相关权限为true - 若
isInstructor = false:所有编辑相关权限为false
studentcanView = isEnrolled(仅已选课学生可见)- 所有编辑相关权限为
false
guestcanView = true(是否展示由课程策略控制,此处为默认放开查看)- 所有编辑相关权限为
false
方法详解
calculatePermissions(role)
- 功能:基于传入的
role以及闭包内的isEnrolled、isInstructor状态,返回UserPermissions - 返回:
UserPermissions - 实现要点:
- 以
basePermissions全部false为默认基线 - 根据
role进入分支,组合isEnrolled/isInstructor形成最终权限
- 以
使用示例(片段)
// 场景:课程页面,根据用户上下文裁剪交互
const { permissions } = useKnowledgeGraphPermissions(
'teacher',
/* isEnrolled */ false,
/* isInstructor */ true
)
if (permissions.value.canView) {
// 渲染知识图谱
}
if (permissions.value.canEditNodes) {
// 开放节点编辑入口
}// 在外部显式计算不同角色的权限(例如进行 A/B 场景模拟)
const { calculatePermissions } = useKnowledgeGraphPermissions('guest')
const teacherAsInstructor = calculatePermissions('teacher')技术特点
- 只读输出:通过
readonly(computed(...))暴露权限,避免被外部意外篡改 - 上下文敏感:以
isEnrolled、isInstructor参与权限决策,满足教学场景差异化需求 - 职责单一:专注于权限判定,不耦合数据读写,使 UI 使用更直观
使用建议
- 显式上下文:在路由层或页面加载时明确
isEnrolled、isInstructor,确保权限判定一致 - UI 绑定:将
permissions绑定到交互控件的disabled/v-if上,避免仅做前端提示而未禁用操作 - 后端校验:前端权限仅用于 UX 与交互裁剪,关键写操作仍需后端二次校验
- 可扩展性:新增角色或策略时优先扩展
UserPermissions与KnowledgeGraphUserRole,保持单点修改
版权所有
版权归属:Evoliant
许可证:MIT