您觉得本文档还缺少什么内容?可以自己补充~

菜单/按钮权限

前端的菜单路由信息,通过后端接口动态返回,后端菜单解决根据用户 -查-> 角色 -查-> 菜单/按钮, 将用户拥有的资源返回。

URI权限控制

  1. 原理 项目启动时, 会加载到spring.factories文件中的SecurityConfiguration配置类, 然后实例UriSecurityPreAuthAspectVerifyAuthFunction , UriSecurityPreAuthAspect定义了@Around , 会对标记了@PreAuth注解和 com.becypress.basic.base.controller.*.*(..) 包下的方法进行切入, 被切入的方法会进行权限验证, 验证逻辑是: 从上下文中取出当前用户, 然后远程查询认证服务, 获取当前用户的所有权限, 跟@PreAuth注解上的编码进行比对是否拥有指定权限.
  2. 当子类Controller想要覆盖父类Controller 方法上的标记的@PreAuth权限编码, 必须在子类的方法上标记 @PreAuth 注解覆盖父类.
@Override
@PutMapping
// 重写父类方法后,可以@PreAuth 重写父类权限
@PreAuth("hasAnyPermission('{}edit')")
public R<User> update(UserUpdateDTO userUpdateDTO) {
//...
}
  1. 权限调试流程: UriSecurityPreAuthAspect#preAuth -> VerifyAuthFunction -> UserServiceImpl#getSysUserById
  2. 通过全局配置可以控制权限判断
bc:
  security:
    enabled: true     # true 全局启用URI权限验证  false 全局禁用URI权限 设置成false后,标记的@PreAuth注解将会失效
    caseSensitive: false   # true: 区分大小写  false: 忽略大小写
  1. 注解@PreAuth(enabled = false)标记在类上,就禁用单个类的URI权限控制, 标记在单个方法上就禁用单个方法的URI权限控制
  2. @PreAuth 的replace属性用于替换 value中的 {}
@PreAuth(replace = "authority:dictionary:", value = "hasAnyPermission('{}view')")
  1. @PreAuth 的 value 中可以配置的方法为VerifyAuthFunction 类中的所有public 方法, 包括:

  2. permit : 忽略权限判断, 视为有权限

  3. denyAll :忽略权限判断, 视为无权限
  4. hasAnyPermission : 是否拥有任意一个指定的权限
  5. hasNoPermission : 是否不含指定权限
  6. hasPermission : 是否拥有所有指定权限
  7. hasAnyRole : 是否拥有任意一个指定的角色
  8. hasRole : 是否拥有所有指定权限
  9. hasNoRole : 是否不含指定角色 上述方法可以按下面的方式使用 :
@PreAuth("permit()")
@PreAuth("denyAll()")
@PreAuth("hasPermission('authority:user:add', 'authority:user:edit')")
@PreAuth("hasRole('SUPER_ADMIN')")

results matching ""

    No results matching ""