一个权限设计问题( Java )

2020-12-20 12:38:01 +08:00
 v2eb
1 、一个权限设计问题
用户分为三级权限 ( 省级,市级 ,区县级 )
省级账号 -> 查看省下所有市的数据
市级账号 -> 查看市下所有区县的数据
区县账号 -> 只能查看此区县的账号

客户需求:在省级账号下,登录的用户只能查看部分授权过的市

2 、一个 excel 导出问题
excel 表头例子:
用户基本信息 1,用户基本信息 1,用户一对多 1(字段 1),用户一对多 1(字段 2),用户一对多 2(字段 1),用户一对多 2(字段 2)
说明:
1 、excel 表头包含基本信息(50 个字段左右),一对多字段(50+字段)
2 、(用户一对多 1 ) 视为一个整体
客户需求:自定义导出字段
问题:怎么写优雅,代码量少,能复用就更好了
1448 次点击
所在节点    问与答
5 条回复
johnsona
2020-12-20 15:38:42 +08:00
rbac1 或许是,要什么复用?赶紧复制粘贴晚下班了
kidlj
2020-12-20 15:38:46 +08:00
建一个 tenant 表用于权限控制,和 user 表是 one2many 的关系,每个级别的用户都有一个对 tenant 。tenant 表内,每个 tenant 和下属级别 tenant 又是一对多的关系(加一个字段 parent_id, 因为是同一个类型,所以是构成的拓扑结构是树状的,参考 https://entgo.io/docs/schema-edges/#o2m-same-type )。省级的 tenant 是 root,没有 parent,但可以添加市级的 children,市级的 tenant 又可以添加区县级的 children,如此一来构成一棵树,还能方便地查询出任一个 tenant 的 children 。添加 children 通过为下属 tenant 设置 parent_id 到上级区域的 tenant id 来完成。

User 创建的数据都可以和 tenant 联系起来。比如通过一个省级的用户,查到他的 tenant,再通过这个 tenant id 查到下属 tenant,进而可以查到这些 tenants 对应的 users,以及属于这些 users 的数据。当然,这是最简单的情形,省级用户可以看到所有市级和区县级用户的数据,如果还要求省级用户只看到部分授权的市级用户的数据,可以在 tenant 表再建一个 tenant 到 tenant 的一对多关系(加一个字段 managed_by_id ),这时候添加授权也是表现为对一个 tenant 添加 children,具体的数据库操作表现为为下属区域 tenant (被授权查看)设置 managed_by_id 到上级 tenant id 。不过添加 children 之前还需要验证下属被管理的 tenant 是否已经指向了上级管理 tenant 的 id,如果没有,说明这不是一个合规操作。

如果要查询一个上级 tenant 的所有下属的数据,就通过 parent_id 来遍历树。如果要查询一个上级 tenant 的已授权的的下属的数据,通过 managed_by_id 来遍历树。

Go 的 ORM Ent. 内建这种 policy 支持,可以作为参考: https://entgo.io/docs/privacy/
kidlj
2020-12-20 16:01:21 +08:00
@kidlj 上边的设计不对 😅。不需要 tenant 表,parent_id 和 managed_by_id 在 user 表维护就可以了。
tangkaichuan
2020-12-20 17:16:50 +08:00
Excel 导出或许可以用 easyexcel 的动态头写入 https://www.yuque.com/easyexcel/doc/write
w292614191
2020-12-21 09:10:08 +08:00
部门树设计好结构,然后业务中保存部门代码。
10 省
101001 市
101001001 区县

查询省级 like 10%,查询市级 like 10100%。

在建立一个登录人员和部门的中间表。需要授权的就勾进来。sql 或程序区分。

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

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

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

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

© 2021 V2EX