权限使用原创
# 权限使用
提示
以下的权限都是指数据权限,资源权限是通过配置角色,对角色指定资源来实现!
# 概要
数据权限是针对执行SQL的拦截及追加,最终达到数据过滤的目的,snapper系统的权限对SQL的过滤主要包含两个信息即用户委托和组织委托 同时还建议添加几个通用的审计字段,因此要实现数据权限需要在对应的表上添加对应的字段(也可以不添加,通过配置时指定)
- create_user 操作人字段,在保存时系统会自动填充当前操作人的账号,注意只在保存(insert)时填充,只填充一次,更新时不会修改
- group_id 操作人人的部门,在保存时系统会自动填充当前操作人的部门,同create_user相同,只是在保存(insert)时填充,如果用户有多个部门,在登录时已经明确部门
- create_time 创建时间字段,在保存时会自动填充当前时间(timestamp)
- update_user 更新人字典,在保存和更新时会自动更新,存储当前操作的用户账号
- update_time 更新时间,在保存和更新时会自动更新当前的时间(timestamp)
- create_user_cn_name 创建人中文名,在保存时自动填充当前操作人的中文名
- update_user_cn_name 更新人中文名,在保存或更新时自动填充当前操作人的中文名
# 使用方式
snapper的权限使用包含两种方式(扩展点)
- 注解式扩展点 通过在方法上进行注解配置,实现静态的权限功能过滤
- 编程式扩展点 通过对应的上下文工具,在运行时动态指定
# 注解式扩展点
系统提供以下注解来进行权限的配置
- @Action 将功能与权限关联,其值为在添加按钮时绑定的业务权限Action
- @ActionConnect 将权限与mapper执行方法绑定,即指定执行那个mapper方法需要进行权限过滤
警告
为保证总是能够看到自己创建的数据,此处即使用户列指定为别的列,默认也会追加crate_user列,如果确实要忽略create_user,请配置beAlwaysFilterCreateUserColumn 为false,或在PermContext中设置withIgnoreCreateUserColumn
其中用户列默认为create_user列,可以指定为其他列,组织列默认为group_id,可以指定为其他列
一个典型的配置例子为:
@Action(value = "ORDER_SEARCH")
@ActionConnect(
value = {"selectList","selectCount"},
userAuthColumn= {UserTag.SERVICE + Strings.HASH + "service_code", UserTag.SALLER + Strings.HASH + "seller_code"},
groupAuthColumn = {UserTag.SERVICE + Strings.HASH + "service_code", UserTag.SALLER + Strings.HASH + "seller_code"}
)
1
2
3
4
5
6
2
3
4
5
6
说明如下
- Action 关联的为ORDER_SEACH 业务权限,此业务权限会与按钮功能一对一进行关联,在界面UI中的菜单关联->按钮中指定
- ActionConnect 指定对OrderMapper(假设添加权限注解的service中关联了OrderMapper,如何关联请参考项目使用)中的selectList、selectCount方法进行过滤
- 用户列(create_user)过滤规则 当用户的tag为SERVICE时过滤的用户列为service_code,当用户的tag为SALLER时过滤的用户列为seller_code
- 组织列(group_id)过滤规则 当用户的tag为SERVICE时过滤的组织列为service_code,当用户的tag为SALLER时过滤的用户列为seller_code
- groupAuthColumn指定列为service_code,seller_code时(不是group_id列),数据存储格式应该为"当前用户的groupid#当前用户的账号”(例:R0101#frog)
# 编程式扩展点
系统编程式扩展点时为解决权限依赖的数据在运行时可见,此时不同的运行状态对应的数据不同,无法通过注解式来静态指定
- PermContext 是系统上下文中的一种,提供一系列的方法进行实时绑定权限上下文
# 用户TAG
提示
某些权限只能通过用户标签来进行设定,比如忽略用户列,忽略组织列等功能!
用户TAG又为”用户业务标签“ 是为满足某些业务场景自定义的字典数据,对应的字典父编码为USER_BUSINESS_TAG,可以通过界面的方式在父字典下根据需求追加对应的用户业务标签,同时在用户管理中指定某些用户, 此时这些用户与业务标签绑定,这样可以动态的进行换标签实时的改变对应的数据权限,达到灵活配置实时渲染的目的。