0%

角色权限-解决方案

权限控制

原则 RBAC

v1.0 基础角色权限

  1. 用户
  2. 角色
  3. 权限(菜单)

  • 菜单和权限合并使用:菜单有菜单链接、权限有权限码(相同含义);权限包含页面、按钮级别
  • 角色需要关联菜单权限
  • 用户需要关联角色

扩展问题 ?
  1. 方法(操作、数据)权限如何处理?
  2. 多租户权限如何处理?
  3. 组织结构(多级)权限如何处理?
  4. 审核功能如何处理?
  5. 微服务中认证中心的权限信息如何传递到个微服务?

v1.1 方法权限处理 -> 针对 Spring Security 框架

通过配置拦截器(url 地址)

1
2
3
4
5
6
7
8
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("admin")
.antMatchers("/user/**").hasAnyRole("admin", "user")
.anyRequest().authenticated()
.and()
...
}

通过过滤器

  1. @PreFilter
  2. @PostFilter

通过注解

  1. JSR-250
  • @RolesAllowed 表示访问对应方法时所应该具有的角色示例

    可以省略前缀 ROLE_,实际的权限可能是 ROLE_ADMIN
  • @PermitAll 表示允许所有的角色进行访问,也就是说不进行权限控制
  • @DenyAll 是和 PermitAll 相反的,表示无论什么角色都不能访问
  1. Spring Security
  • @PreAuthorize:方法执行前进行权限检查
  • @PostAuthorize:方法执行后进行权限检查

    通过 Spring EL 表达式
    方法内容
  • @Secured:类似于 @PreAuthorize

参考

Spring Security 中的四种权限控制方式

v1.2 多租户权限处理

microservices-platform 处理方案

  1. 本项目因为主要设计面向的是中台架构,所以用户数据是共享的并不会隔离,以实现多应用共享同一用户
  2. 菜单、角色管理和 token 管理这 3 个功能(能看到所有租户的数据),由管理员统一为各个租户维护数据,其他租户不需要看到这 3 个菜单

davinci 处理方案

  1. 组织

参考

码农家园

v1.3 组织机构(多级)权限处理

  1. 权限多级(前端):
  • 默认展示树结构,且要求全部数据展示
  • 角色关联权限
  • 选中后全部关联,并传到后台
  • 后台只根据前端选中的数据进行存储判断
  1. 角色多级(树结构-系统操作):
  • 角色进行层级运帷,与权限结构相似
  • 组织机构和角色进行关联树结构 -> 实现组织机构的权限处理

v1.4 审核功能权限处理