hsweb 用户手册
  • 说明
  • 快速开始
  • 增删改查
    • 通用CRUD
    • 动态SQL条件
    • 数据库版本控制
    • 拓展实体类
  • 权限控制
    • 登录授权
    • 权限管理
    • RBAC权限控制
    • 数据权限控制
    • 双因子验证
    • 前后分离
  • 常用工具
    • 枚举数据字典
    • 对象属性拷贝
    • 缓存
    • 分布式锁
    • 计数器
    • Excel导入导出
  • 日志
  • 多数据源
    • 多数据源管理
    • Mybatis 多数据源
    • Jta 多数据源事务
  • 业务功能
    • 用户权限
    • 组织架构
    • 数据字典
    • 动态表单
    • 工作流
    • 数据源配置
    • 模板管理
    • 动态脚本
    • 首页dashbord配置
    • 文件上传下载
    • 在线数据库管理
  • 其他
Powered by GitBook
On this page
  • 注解权限控制声明
  • 自定义权限控制声明
  • 事件

Was this helpful?

  1. 权限控制

RBAC权限控制

Previous权限管理Next数据权限控制

Last updated 6 years ago

Was this helpful?

hsweb提供了常规的RBAC权限控制,默认基于AOP实现。hsweb-authorization-api 模块中定义了权限相关接口,核心类:

Authentication : 用户的所有权限相关信息。

AuthenticationManager:用于管理用户的权限信息已经授权。

AuthenticationSupplier: 用于获取当前登录用户和指定用户的权限,可通过实现此接口来自定义权限获取方式。

注解权限控制声明

在需要进行权限控制的Controller 中注解@Authorize 以声明此接口需要控制权限。

属性列表:

属性名

说明

permission

权限标识,如: user-manager

action

操作,如: add

role

角色ID,如: admin

user

用户名,如: admin

logical

存在多个声明时使用的策略:

AND: 并且

OR: 或者

phased

验证时机:

before: 在请求之前

after: 在请求之后

ignore

忽略权限控制

description

权限说明

dataAccess

数据权限声明

注意:

  1. 在类上注解时,表示此类的所有接口都需要进行权限控制。

  2. 方法和类上的注解默认将合并处理,如:类注解@Authorize(permission="user-manager"),方法注解 @Authorize(action="add"),在权限控制时会合并为@Authorize(permission="user-manager",action="add")

自定义权限控制声明

在注解方式进行声明时,可能不能完全满足需求,比如要修改已经打了包的模块的权限控制声明。

实现接口: AopMethodAuthorizeDefinitionCustomizerParser ,实现parse 方法,返回 AuthorizeDefinition .即可。AuthorizeDefinition 的属性和Authorize注解基本一致,具体查看源代码即可。

如果返回EmptyAuthorizeDefinition 则表示不进行权限控制,如果返回null 则表示使用默认的权限定义。

事件

在进行权限控制时,会触发事件:AuthorizingHandleBeforeEvent ,可通过监听此事件,来实现自定义的权限控制。例如:

@EventListener
public void handEvent(AuthorizingHandleBeforeEvent event) {
        if(event.getContext()
        .getAuthentication()
        .getUser()
        .getUsername()
        .equals("admin")){
         //admin用户拥有所有权限
           event.setAllow(true);
        }
}

通过配置文件设置不进行权限控制的接口

application.yml
hsweb:
    authorize:
        allows:
            users:
                admin: * # admin用户可以访问全部接口
                guest: **.query* # guest 可以返回query开头的方法
            roles:
                admin: *