Spring 基础框架-- Ruoyi 权限管理架构详解

发布于:2025-03-06 ⋅ 阅读:(188) ⋅ 点赞:(0)

一、权限管理整体架构

若依的权限管理架构基于用户-角色-权限的RBAC模型,并扩展了数据权限控制。核心架构可分为以下四层:

数据范围控制
用户层
角色层
权限层
数据过滤层
菜单/按钮/接口权限
角色关联部门/数据范围

二、核心模块详解

1. ​基础权限模型(RBAC)​

  • 用户(sys_user)​:通过 dept_id 关联部门表,支持多角色分配

    • ​角色(sys_role)​:
      data_scope字段定义数据权限范围(1-全部,2-自定,3-本部门,4-本部门及以下,5-仅本人)
    • 通过sys_role_menu表关联菜单权限
  • ​权限标识:

    • 菜单权限:system:user:list 格式,对应前端路由与后端接口
    • 按钮权限:通过Vue指令 v-hasPermi 实现动态渲染

2. ​数据权限实现机制

通过部门树结构+动态SQL改写实现数据过滤:

  • ​部门层级存储:部门表sys_dept使用parent_id字段构建树形结构

  • 数据范围判定:

// 数据权限切面(DataScopeAspect)
@Before("@annotation(controllerDataScope)")
public void doBefore(JoinPoint point) {
    // 根据角色数据范围生成SQL条件
    String sqlFilter = " AND dept_id IN (" + deptIds + ")"; 
    params.put("dataScope", sqlFilter);
}
  • ​动态SQL改写:在Mapper层通过 ${params.dataScope} 插入过滤条件

三、架构图设计

在这里插入图片描述

四、关键实现流程

​1. 权限分配流程:

  • 创建菜单时定义权限标识(如system:user:query)
  • 角色管理中勾选菜单/按钮权限,设置数据范围
  • 用户管理中分配角色

2. 权限校验流程:

  • 前端:通过v-hasPermi指令隐藏无权限按钮
  • 后端:
@PreAuthorize("@ss.hasPermi('system:user:edit')") // 接口权限校验
@DataScope(deptAlias = "d", userAlias = "u") // 数据权限注解

3. ​数据过滤流程:

SELECT * FROM sys_user 
WHERE 1=1 
${params.dataScope} 
-- 动态替换为如:AND dept_id IN (101, 102)

五、扩展优化建议

  • 精细化控制:可扩展字段级权限,通过@ColumnScope注解限制敏感字段
  • 实时生效机制:结合Redis缓存权限变更,避免重启服务
  • 数据权限继承:支持部门树权重计算(如上级角色自动包含下级数据)

网站公告

今日签到

点亮在社区的每一天
去签到