有没有关于数据查询权限控制的优雅实现方式

2021-01-27 09:22:00 +08:00
 gonethen
2717 次点击
所在节点    问与答
15 条回复
imxthd
2021-01-27 09:26:58 +08:00
参考开源框架
gonethen
2021-01-27 10:26:07 +08:00
@imxthd #1 有什么关键字吗,毫无头绪啊
leesam1024
2021-01-27 11:48:37 +08:00
我们是自己实现的。通过自定义注解+拦截器实现。
权限角色分为
基础业务角色(是否可以操作该业务功能。通过 controller 上的自定义注解+注解拦截器实现) 比如管理员、供货角色
资源角色(定义该角色下面可以接触那些业务的更细分数据数据)

用户必须先有基础业务角色后,才能操作该业务角色下面的资源

基础业务角色是程序开发时就定义好,写死的。
资源角色,可以通过管理员动态添加。

1 个用户可以对应多个基础业务角色和资源角色
hxyCoding
2021-01-27 11:53:59 +08:00
如果只是可视化查询,可以考虑后置屏蔽
gonethen
2021-01-27 11:59:28 +08:00
@leesam1024 #3 我想我的问题表述的还是不够具体。其实我想问的重点在于上下级之间的数据权限控制。

比如总后台能看到所有平台的订单;平台管理员只能看自己平台的订单;公司只能看自己公司的订单;员工只能看到自己发布的订单。
hsluoyz
2021-01-27 12:02:54 +08:00
Casbin 支持多级 RBAC 模型和多租户模型,可以表达你所说的“比如总后台能看到所有平台的订单;平台管理员只能看自己平台的订单;公司只能看自己公司的订单;员工只能看到自己发布的订单。”
sakasaka
2021-01-27 13:40:45 +08:00
尝试在业务表加入有关权限的标识
imxthd
2021-01-27 14:03:38 +08:00
@gonethen bladex
liuxey
2021-01-27 14:05:40 +08:00
即使“数据各不相同”,也要进行梳理分类,比如:全数据权限、总公司权限、分公司权限、部门权限、个人权限

理清楚后就可以根据不同的数据权限做功能
如果理不清楚,理都理不清楚!怎么优雅的了!
THESDZ
2021-01-27 16:15:34 +08:00
我对优雅的理解:
1.非侵入的:使用注解,配置,代理模式等
2.无感的,即不破坏现有编程习惯
具体的实现
1.如果使用了通用 mapper 等,可以尝试改造通用 mapper 中代理的实现,如 select 等方法,可以增加额外的<if></if>等
2.使用拦截器,对 sql 进行处理
3.权限无非是参数的获取和使用,将其抽象为接口,具体的实现可以根据实际需求切换
THESDZ
2021-01-27 16:25:04 +08:00
@gonethen 数据权限使用的数据中不包含逻辑
1
1.1
1.1.1
1.2
如果是 1.1,则传入 1.1,1.1.1
如果是 1,则传入 1,1.1,1.1.1,1.2

全部的情况建议传入所有的,但是也可以特殊判断

目的是,如果有权限应该是显示分配了权限才有
pigcandance
2021-01-27 16:56:58 +08:00
添加字段 companyId 可以数据隔离
liuzhaowei55
2021-01-27 18:31:40 +08:00
可以参看阿里云 dms 的审计功能,但应该做不到字段级别的审计,可以把设置字段加密
uselessVisitor
2021-01-28 08:25:55 +08:00
登录后把 username+部门放在 redis 中,每张表冗余 createBy,写个方法获取用户部门
tame619
2021-01-28 12:21:37 +08:00
部门分层次,父部门能够查看子部门的信息。角色资源管理后台接口权限。部门管理接口得到的内容。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX