功能权限
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 SysRolePermission3. 权限控制实现
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中,提高访问速度
- 用户登录时加载权限到缓存
- 权限变更时自动刷新缓存