在下最近在学习多用户系统的搭建,有几个问题想不到清晰明确的解决方案,也不知道在哪里可以找到相关的资料进行学习,特来求问:
一般如何在数据库中表达多用户的记录?是使用数据库自身的 user 机制来管理(每个用户创建一个 user ),还是用普通的 table 来表示用户( table 的每一行表示一个用户)?
对于使用数据库的 user 而言,使用数据库自身的策略(比如看到 postgres 有 table policies,mysql 应该也有类似的设置)做 row level 的权限设置有什么限制和缺点吗?
相应的,如果使用 table 来存储用户的话,是否意味着后台在接收到所有 user 请求时都必须首先检查相应的授权(是否有专门的机制做授权管理?),是否有通用的行业解决方案呢(比如 java 做后台应用,是否有相应的权限管理框架可用)?
谢谢。
1
qza1212 2019-10-22 13:57:39 +08:00
shiro
|
3
lspvic 2019-10-22 14:00:12 +08:00 via Android
keycloak
|
4
90d0n 2019-10-22 14:00:54 +08:00
相比 shiro 更推荐 spring security
|
5
lllllliu 2019-10-22 14:12:49 +08:00
RBAC ?
|
7
lllllliu 2019-10-22 14:23:04 +08:00 1
@felixin #6 昂,那你要把系统里的各个权限分出来的,对于到各个功能组,粒度要很细。
然后生成权限表。 然后有个一对多的用户对于权限表。每次用户登录之后后端生成角色权限,然后前端根据权限渲染菜单,如果都是后端渲染,后端 session 里可以存。然后 api 部分可以写个中间件,处理每个请求是否有权限。 基本的就是这样的,主要是要把模型做好。 |
8
lllllliu 2019-10-22 14:23:56 +08:00
再细致点可以划分出用户组,用户组对权限,用户对于用户组。
|
9
Ianchen 2019-10-22 14:41:52 +08:00
自己写 RBAC2
|
10
julyclyde 2019-10-22 18:05:33 +08:00
用户
角色 用户-角色表 权限 角色-权限表 需要授权访问的应用 应用-权限表 |
11
Vegetable 2019-10-22 18:24:46 +08:00 1
RBAC 的 R 是 Role,不是 User。
如果你说的多用户是像 V 站这样的系统,你和我都是 User,我们的 Role 是同样的( User ),livid 的 Role 是超级管理员( SU ),所以我们和他权限不同,根据不同的角色来区分权限的策略,就是 Role-Based Access Control。 你发了这个帖子,你可以将这个帖子下沉一天,livid 也可以,因为发帖人本人拥有下沉自己帖子的权限,livid 有下沉所有帖子的权限。但是我不可以沉你的帖子,因为这个帖子在数据库中关联了你这个用户。 也就是说,所有用户会出现在数据库的一张用户表中,所有帖子也保存在一张帖子表中,通过一个 user_id 字段来区分发帖人。 没错,应该有通用中间件来做权限验证。 建议去 github 上找一个论坛类开源项目学习一下。 |
12
Vegetable 2019-10-22 18:25:39 +08:00
saas 类的系统涉及到了不同组织之间的隔离,变化更多
|
13
mamahaha 2019-10-22 18:31:02 +08:00
原理倒是不难,想要做到高效+规范就难了
|
14
knight9 2019-10-22 20:37:42 +08:00 via Android
前几天用 spring boot+shiro 刚写了这个
|
15
felixin OP 感谢大家提供的名词,非常有用!按图索骥了解了很多,框架不一定局限于 java,node.js 也可以推荐
|
16
felixin OP 发现好多人收藏了这个主题,希望大家能多推荐一些 state of the art 的解决方案
|
17
pythongo 2019-10-23 09:06:26 +08:00 1
Role-Based Access Control. Second Edition.pdf
有这么一本书,虽然老点,但是理论知识还是可以的。 |