Skip to content

功能权限

1. 概述

ZsAdmin采用RBAC(基于角色的访问控制)模型实现功能权限管理,通过角色关联菜单和按钮权限,实现细粒度的权限控制。

2. 权限模型

2.1 核心概念

  • 权限(Permission):系统中的功能点,包括菜单和按钮
  • 角色(Role):权限的集合,分配给用户
  • 用户(User):关联一个或多个角色

2.2 数据模型

mermaid
classDiagram
class SysUser {
  +Long id
  +String username
  +String password
}
class SysRole {
  +Long id
  +String roleName
  +String roleKey
}
class SysPermission {
  +Long id
  +String permissionCode
  +String permissionName
  +Integer type
}
class SysUserRole {
  +Long userId
  +Long roleId
}
class SysRolePermission {
  +Long roleId
  +Long permissionId
}
SysUser "*" --> "*" SysRole : "用户-角色" via SysUserRole
SysRole "*" --> "*" SysPermission : "角色-权限" via SysRolePermission

3. 权限控制实现

3.1 注解式权限控制

使用自定义注解实现方法级别的权限控制:

java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequiresPermission {
    String value();
}

3.2 权限拦截器

通过Spring AOP实现权限拦截:

java
@Component
@Aspect
public class PermissionAspect {
    @Pointcut("@annotation(com.zs.common.security.annotation.RequiresPermission)")
    public void permissionPointcut() {}
    
    @Before("permissionPointcut() && @annotation(requiresPermission)")
    public void checkPermission(RequiresPermission requiresPermission) {
        // 权限检查逻辑
    }
}

4. 权限管理功能

4.1 菜单管理

  • 支持多级菜单配置
  • 菜单与权限关联
  • 支持菜单图标配置

4.2 按钮权限

  • 为每个功能按钮分配唯一权限码
  • 支持按钮级别的权限控制
  • 前端根据权限动态显示/隐藏按钮

5. 权限缓存

  • 权限数据缓存在Redis中,提高访问速度
  • 用户登录时加载权限到缓存
  • 权限变更时自动刷新缓存