Skip to content

菜单与权限规则

菜单与权限系统基于经典的 RBAC 权限模型,后台 权限管理 菜单下:

  • 菜单规则管理 用于管理 菜单 和细粒度的 权限节点
  • 角色组管理 中的分组用于持有 菜单权限节点,且分组间可配置上下级关系。
  • 每个管理员都有自己的 角色组,支持配置多个,配置则相当于该管理员拥有了对应角色组的所有 菜单权限节点

ai-go-admin 基于以上 RBAC 权限模型实现了非常强大的路由与权限系统。

  • 无限子级菜单
  • 前后两端双鉴权
  • WEB 端路由自动注册
  • WEB 端按钮级鉴权
  • 更多待您自行探索

前端路由

注册一个前端路由至少需要:

  • 路由名称
  • 路由标题
  • 路由路径
  • vue 组件路径

我们通过后台的 菜单规则管理 表单,完成以上数据的收集后,前端能够自动完成路由的注册(我们称之为动态路由,通过 系统初始化请求 获取并自动注册后,即可正常访问)。

后台菜单

后台菜单基于上一点 前端路由 收集到的数据,有它们就已经足以建立好管理员的 后台菜单列表,所以菜单和前端路由的关联是自动的。

权限节点

设计非常简单,主要是两个字段:

  • 节点标题
  • 节点名称(以 / 分割,实现任意层级的细粒度控制,如分组更新:group/update

前端随 系统初始化请求 加载当前管理员的所有权限节点,然后查询节点名称即可确定一个按钮是否显示(src\utils\common.tsauth 函数)。

权限节点最主要的功能是额外关联了 API 层面的鉴权设计,前端按钮是否显示只影响界面,而管理员若能不经授权访问某个 API 问题就大条了。

不过实现服务端鉴权是非常简单的:当管理员请求 /admin/auth/group/update/1 (编辑管理员分组接口)时,就检查他所有角色组的权限持有情况,当有个名为 auth/group/update 的权限节点时,就可以放行。

所以,API验权前端按钮 验权的关联也是自动的。只需要在新增权限节点时,将它的名称取为服务端的方法名即可。

字段填写建议

  • 规则名称:规则的名称应该是英文+全小写的,我们推荐直接使用 / 来分隔目录层次,并使用中划线 - 来分割多个单词。
  • 路由路径:比如您正在看的网页的路径是:senior/menu-rule,您需要为规则设计一个路由路径,建议直接和 规则名称 保持一致。
  • 组件路径:填写实际的组件路径即可,例如:/src/views/admin/auth/group/index.vue,前端组件是根据路由按需加载的。
  • 规则权重:数字越大,排序越靠前,系统内置的 控制台 的权重为 999
  • 扩展属性:可以配置只自动注册到路由或菜单,这样就可以实现:同一路由下多个菜单,比如将 auth/menu 只添加为路由,那么可以另外将 auth/menuauth/menu/:aauth/menu/:b/:c 只添加为菜单。
  • 缓存:开启后,将使用 keep-alive 包裹标签页,实现切换标签,原标签保留状态(表单输入数据等)。