Skip to content

权限控制

模块概述

权限控制是企业文档管理系统的安全核心,基于Apache Shiro实现完整的RBAC(Role-Based Access Control)权限模型。支持菜单权限、按钮权限、数据权限等多维度权限控制,确保文档资源的安全访问。


一、RBAC权限模型

1.1 模型结构

用户 (SysUser)

    ├──→ 角色 (SysRole) ──→ 菜单权限 (SysMenu)
    │                           ├── 页面访问权限
    │                           └── 按钮操作权限

    └──→ 部门 (SysDept) ──→ 数据权限
                                ├── 全部数据
                                ├── 本部门数据
                                ├── 本部门及以下数据
                                ├── 仅本人数据
                                └── 自定义数据

1.2 核心概念

概念说明
用户系统的使用者
角色权限的集合,如管理员、普通用户
菜单系统功能模块,对应页面和按钮
部门组织架构单元,用于数据权限控制

二、菜单权限

2.1 权限类型

类型说明示例
目录权限控制左侧菜单目录的显示文档管理、系统管理
菜单权限控制功能页面的访问文件列表、用户管理
按钮权限控制页面操作按钮新增、编辑、删除按钮

2.2 权限标识

菜单权限使用权限字符串标识:

system:user:list      - 用户列表查看权限
system:user:add       - 用户新增权限
system:user:edit      - 用户编辑权限
system:user:remove    - 用户删除权限
system:user:export    - 用户导出权限

2.3 权限配置

  • 为角色分配菜单权限
  • 支持多选批量分配
  • 权限即时生效
  • 支持权限继承

三、数据权限

3.1 权限范围

范围说明适用场景
全部数据可见所有文档超级管理员
本部门数据仅可见本部门文档部门经理
本部门及以下可见本部门及子部门文档分管领导
仅本人数据仅可见自己上传的文档普通员工
自定义数据按配置可见指定部门文档特殊岗位

3.2 数据权限实现

通过MyBatis拦截器实现数据权限过滤:

java
// 数据权限注解
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysFiles> selectList(SysFiles file) {
    return fileMapper.selectList(file);
}

3.3 权限规则

  • 数据权限与角色绑定
  • 支持多角色数据权限合并
  • 取最大权限范围

四、角色管理

4.1 预置角色

角色权限范围
超级管理员拥有所有权限
部门管理员管理部门内用户和文档
普通用户管理个人文档
访客仅查看公开文档

4.2 角色配置

  • 角色增删改查
  • 角色权限分配
  • 角色数据范围设置
  • 角色用户分配

4.3 角色继承

  • 支持角色继承关系
  • 子角色继承父角色权限
  • 可覆盖父角色权限

五、用户管理

5.1 用户属性

属性说明
基本信息用户名、昵称、邮箱、电话
账号状态启用/禁用
所属部门决定数据权限范围
担任岗位岗位角色
拥有角色功能权限

5.2 用户操作

  • 用户增删改查
  • 密码重置
  • 状态管理
  • 批量导入导出

5.3 用户组

  • 按部门分组
  • 按岗位分组
  • 自定义用户组

六、部门管理

6.1 部门结构

树形部门结构:

公司总部
├── 技术部
│   ├── 开发组
│   ├── 测试组
│   └── 运维组
├── 市场部
│   ├── 销售组
│   └── 推广组
├── 财务部
└── 人事部

6.2 部门功能

  • 部门增删改查
  • 部门排序
  • 部门人员管理
  • 部门权限配置

七、权限验证

7.1 前端验证

Thymeleaf模板中权限控制:

html
<!-- 有权限才显示按钮 -->
<a shiro:hasPermission="system:user:add" class="btn btn-primary">新增用户</a>

<!-- 有任一权限即显示 -->
<div shiro:hasAnyPermissions="system:user:add,system:user:edit">
    操作按钮组
</div>

7.2 后端验证

Controller层权限注解:

java
// 需要特定权限
@RequiresPermissions("system:user:add")
public AjaxResult add(@RequestBody SysUser user) {
    // 新增用户逻辑
}

// 需要任一权限
@RequiresPermissions(value = {"system:user:add", "system:user:edit"}, logical = Logical.OR)
public AjaxResult save(@RequestBody SysUser user) {
    // 保存用户逻辑
}

7.3 数据权限验证

Service层数据权限注解:

java
@DataScope(deptAlias = "d")
public List<SysFiles> selectFileList(SysFiles file) {
    // 自动拼接数据权限SQL
    return fileMapper.selectList(file);
}

八、安全机制

8.1 登录安全

  • 密码加密存储(MD5 + Salt)
  • 登录失败次数限制
  • 登录IP限制
  • 会话超时控制

8.2 操作安全

  • 敏感操作二次确认
  • 重要操作日志记录
  • 异常操作预警

8.3 传输安全

  • HTTPS传输加密
  • 敏感数据脱敏显示
  • Token身份验证

业务价值

安全可控

  • 细粒度权限控制,防止越权访问
  • 数据权限隔离,保护敏感信息
  • 操作审计追溯,责任明确

管理便捷

  • 角色权限模板,快速配置
  • 权限继承机制,减少重复配置
  • 批量权限分配,提升效率

合规审计

  • 完整权限变更记录
  • 用户操作日志
  • 满足合规要求

技术实现

核心技术

  • 安全框架:Apache Shiro 1.4.0
  • 权限注解:自定义@DataScope注解
  • 拦截器:MyBatis拦截器实现数据权限
  • 缓存:EhCache缓存权限数据

权限流程

用户请求 → Shiro认证 → 权限校验 → 数据权限过滤 → 返回数据
                ↓           ↓              ↓
            身份验证    菜单/按钮权限    SQL拼接

返回项目概览

客户留存与增长 · 企业数字化解决方案