Snapper Snapper
首页
文档
  • 权限演示 (opens new window)
  • 工作流演示 (opens new window)
问答
更新日志
gitee (opens new window)
首页
文档
  • 权限演示 (opens new window)
  • 工作流演示 (opens new window)
问答
更新日志
gitee (opens new window)
  • 介绍及配置

    • 项目介绍
    • 微服务版项目配置
    • 项目开发
    • 权限使用
      • 概要
      • 权限范围
      • 使用方式
      • 注解式扩展点
      • 编程式扩展点
      • 用户标签
      • 扩展点@Action信息
      • 扩展点@ActionConnect信息
    • 权限的默认规则
    • 系统注解及上下文清单
    • 登录模式
    • 高级查询与注入
    • 状态流使用
    • 其他系统工具使用
  • 集成使用
  • 介绍及配置
frog
2025-06-20
目录

权限使用原创

# 权限使用

提示

以下的权限都是指数据权限,资源权限是通过配置角色,对角色指定资源来实现!

# 概要

数据权限是针对执行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 更新人中文名,在保存或更新时自动填充当前操作人的中文名

# 权限范围

系统中定义权限范围分为以下几种:

  • 用户权限范围 关联列create_user列,表示当前用户相关的权限范围
  • 组织权限范围 关联列group_id列,表示当前用户组织相关的权限范围
  • 公司权限范围 关联列group_id,为保证数据的安全线,默认总是过滤分公司数据(group_id表示分公司的数据)

组织树参考: 组织树

# 使用方式

snapper的数据权限使用包含两种方式(扩展点)

  • 注解式扩展点 通过在方法上进行注解配置,实现静态的权限功能过滤(@Action 和 @ActionConnect)
  • 编程式扩展点 通过对应的上下文工具,在运行时动态指定(PermContext)

# 注解式扩展点

系统提供以下注解来进行权限的配置

  • @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"}
)

说明如下

  • 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 是系统上下文中的一种,提供一系列的方法进行实时绑定权限上下文

PermContext扩展点

# 用户标签

提示

用户标签是连接用户与数据权限的纽带,自定义标签能够实时动态的配置用户数据权限

  • 用户标签(tag)又为"用户业务标签" 是为满足某些业务场景自定义的字典数据,对应的字典父编码为USER_BUSINESS_TAG,可以通过界面的字典管理功能在父字典下根据需求追加对应的用户业务标签,
  • 在用户管理中对用户设置对应的用户属性(业务标签),此时这些用户与业务标签绑定
  • 在注解扩展点中可以根据用户标签来配置权限,这样可以动态的进行换标签实时改变对应的数据权限,达到灵活配置实时渲染的目的。

# 扩展点@Action信息

属性 说明
value 对应业务权限定义,每个功能按钮对应一个业务权限定义,具体参考按钮定义
ignoreUserScope 设置是否忽略用户权限范围,默认为false,如果为true则忽略用户权限范围
ignoreGroupScope 设置是否忽略组织权限范围,默认为false,如果为true则忽略组织权限范围
ignoreCompanyScopeTags 只过滤公司的用户标签,可以配置多个
onlyFilterCompanyTags 设置是否忽略公司权限范围,默认为false,如果为true则忽略公司权限范围,此时会自动忽略用户权限范围和组织权限范围

# 扩展点@ActionConnect信息

属性 说明
value 对应执行的Mapper(mybatis的mapper方法名, 可包含多个
userAuthColumn 指定用户权限范围列的列名,默认为create_user,可配置多个.支持tag1#column1,tag2#column2的格式,其中tag为用户标签,column为列名
groupAuthColumn 指定组织权限范围列的列值,默认为group_id,可配置多个.支持tag1#value1,tag2#value2的格式,其中tag为用户标签,value为列值
ignoreUserScopeTags 忽略用户权限范围标签,可配置多个.
ignoreGroupScopeTags 忽略组织权限范围标签,可配置多个.
beAlwaysFilterUpdateUserColumn 是否总是过滤update_user列,默认为true,即默认只能看到自己的数据(ignoreUserScope为false情况下)
tableNameWithAuthInject 数据权限SQL插入位置(表名同级),即与配置表明同级位置插入WHERE条件,如果该值为空,则会放在最外层
tableNameWithColumnInject 列权限SQL插入位置(表名同级),即与配置表明同级位置分析列权限
项目开发
权限的默认规则

← 项目开发 权限的默认规则→

Theme by Vdoing | Copyright © 2023-2025
Frog

鲁ICP备2023023334号-1

鲁公网安备 37021302001133号

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式