Skip to content

功能权限

功能权限用于控制“用户能进入哪些菜单、能点击哪些按钮、能调用哪些受保护接口”。在 RuoYi Office 中,它由菜单、角色、用户三类数据共同组成,前端负责菜单树和按钮展示,后端通过 @PreAuthorize 校验权限标识。

本地实现位置

位置
菜单页面ruoyi-office-vben/apps/web-antd/src/views/system/menu
角色页面ruoyi-office-vben/apps/web-antd/src/views/system/role
菜单 Controlleryudao-module-system-server/.../permission/MenuController.java
角色 Controller.../permission/RoleController.java
权限 Controller.../permission/PermissionController.java

权限模型

菜单既承载前端路由,也承载按钮权限。角色是权限分配的最小运营单元,用户通过角色继承菜单和按钮能力。

菜单管理

views/system/menu 使用树形表格维护菜单。常见菜单类型包括目录、菜单、按钮:

类型主要用途关键字段
目录组织左侧导航层级名称、父级、图标、排序
菜单绑定具体路由页面路由地址、组件路径、权限标识、状态
按钮控制页面操作按钮权限标识、父级菜单、状态

后端入口:

操作接口权限标识
创建菜单POST /system/menu/createsystem:menu:create
修改菜单PUT /system/menu/updatesystem:menu:update
删除菜单DELETE /system/menu/deletesystem:menu:delete
菜单列表GET /system/menu/list页面查询使用
精简菜单GET /system/menu/list-all-simple/simple-list角色分配菜单使用

在多租户开启时,MenuController#getSimpleMenuList 会按租户套餐过滤可选菜单,避免租户管理员分配未开通能力。

角色管理与菜单授权

views/system/role 支持角色新增、编辑、删除、导出、菜单权限和数据权限。菜单授权弹窗会先调用 /system/permission/list-role-menus 获取已有菜单,再提交 /system/permission/assign-role-menu

操作接口权限标识
创建角色POST /system/role/createsystem:role:create
修改角色PUT /system/role/updatesystem:role:update
删除角色DELETE /system/role/deletesystem:role:delete
角色分页GET /system/role/page页面查询使用
导出角色GET /system/role/export-excelsystem:role:export
查询角色菜单GET /system/permission/list-role-menussystem:permission:assign-role-menu
分配角色菜单POST /system/permission/assign-role-menusystem:permission:assign-role-menu

前后端权限如何对应

新增业务页面时,建议按以下顺序配置:

  1. 在菜单管理创建目录或菜单,填写路由、组件、排序和图标。
  2. 为新增、编辑、删除、导出等操作创建按钮菜单,权限标识使用 模块:资源:动作 风格,例如 system:user:create
  3. 前端按钮通过 auth: ['system:user:create'] 控制展示。
  4. 后端接口通过 @PreAuthorize("@ss.hasPermission('system:user:create')") 做最终拦截。
  5. 在角色管理中把菜单和按钮授权给角色。

多租户下的功能权限

如果开启 SaaS 多租户,租户套餐会限制租户可见菜单范围。PermissionController#assignRoleMenu 在保存角色菜单前会调用租户菜单过滤逻辑,将未开通菜单从提交数据中移除。因此,排查“角色勾选后没保存”的问题时,要同时检查角色页面和租户套餐。

常见问题

现象排查方向
菜单不显示检查菜单状态、父级状态、角色是否授权、路由组件是否存在
按钮不显示检查按钮菜单权限标识与前端 auth 是否一致
接口返回无权限检查后端 @PreAuthorize 标识是否已授权给当前角色
租户无法分配某菜单检查租户套餐是否包含该菜单
修改菜单后仍旧异常重新登录或刷新权限缓存,确认前端路由已重新拉取
联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版