授权(RBAC)
XinAdmin 实现了标准的用户-角色-权限三层 RBAC 授权模型。
RBAC 模型
数据表结构
权限规则类型
权限获取逻辑
超级管理员
用户 ID = 1 被系统硬编码为超级管理员,具备以下特权:
- 自动获得所有权限 key
- 在 Token 能力检查中始终通过
- 不可被删除
- 自动获取完整菜单树
- 角色 ID = 1 的权限不可被修改
超级管理员的特权在 三个层面 实现:
SysUserModel::access()返回全部 key、SysRoleModel::getRuleIdsAttribute()返回全部规则、SysAccessToken::can()始终返回 true。
动态菜单
用户登录后,后端根据其角色权限返回对应的菜单树:
- 超级管理员:直接返回所有
status=1的菜单/路由 - 普通用户:通过角色 → 权限关联链获取菜单,构建树形结构并去重
前端 LayoutContext 在挂载时调用 menu() API,MenuRender 根据菜单类型和隐藏状态渲染导航。
前端权限控制
AuthButton 组件
基于权限 key 的条件渲染组件:
无权限时组件返回 null,按钮不会被渲染。实现原理:
useAuth Hook
在逻辑代码中手动检查权限:
XinTable 的 accessName
XinTable 组件的 accessName 属性自动为操作按钮生成权限 key:
权限 Key 命名规范
推荐使用点号分隔的层级命名: