权限控制
原则 RBAC
v1.0 基础角色权限
- 用户
- 角色
- 权限(菜单)
- 菜单和权限合并使用:菜单有菜单链接、权限有权限码(相同含义);权限包含页面、按钮级别
- 角色需要关联菜单权限
- 用户需要关联角色
扩展问题 ?
- 方法(操作、数据)权限如何处理?
- 多租户权限如何处理?
- 组织结构(多级)权限如何处理?
- 审核功能如何处理?
- 微服务中认证中心的权限信息如何传递到个微服务?
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() ... }
|
通过过滤器
- @PreFilter
- @PostFilter
通过注解
- JSR-250
- @RolesAllowed 表示访问对应方法时所应该具有的角色示例
可以省略前缀 ROLE_,实际的权限可能是 ROLE_ADMIN
- @PermitAll 表示允许所有的角色进行访问,也就是说不进行权限控制
- @DenyAll 是和 PermitAll 相反的,表示无论什么角色都不能访问
- Spring Security
- @PreAuthorize:方法执行前进行权限检查
- @PostAuthorize:方法执行后进行权限检查
通过 Spring EL 表达式

- @Secured:类似于 @PreAuthorize
参考
Spring Security 中的四种权限控制方式
v1.2 多租户权限处理
- 本项目因为主要设计面向的是中台架构,所以用户数据是共享的并不会隔离,以实现多应用共享同一用户
- 菜单、角色管理和 token 管理这 3 个功能(能看到所有租户的数据),由管理员统一为各个租户维护数据,其他租户不需要看到这 3 个菜单
davinci 处理方案
- 组织
参考
码农家园
v1.3 组织机构(多级)权限处理
- 权限多级(前端):
- 默认展示树结构,且要求全部数据展示
- 角色关联权限
- 选中后全部关联,并传到后台
- 后台只根据前端选中的数据进行存储判断
- 角色多级(树结构-系统操作):
- 角色进行层级运帷,与权限结构相似
- 组织机构和角色进行关联树结构 -> 实现组织机构的权限处理
v1.4 审核功能权限处理