请问是否有相关资料学习一个典型的多用户系统的权限管理的是如何架构的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
felixin
V2EX    数据库

请问是否有相关资料学习一个典型的多用户系统的权限管理的是如何架构的?

  •  1
     
  •   felixin 2019-10-22 13:53:40 +08:00 2748 次点击
    这是一个创建于 2252 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在下最近在学习多用户系统的搭建,有几个问题想不到清晰明确的解决方案,也不知道在哪里可以找到相关的资料进行学习,特来求问:

    1. 一般如何在数据库中表达多用户的记录?是使用数据库自身的 user 机制来管理(每个用户创建一个 user ),还是用通的 table 来表示用户( table 的每一行表示一个用户)?

    2. 对于使用数据库的 user 而言,使用数据库自身的策略(比如看到 postgres 有 table policies,mysql 应该也有类似的设置)做 row level 的权限设置有什么限制和缺点吗?

    3. 相应的,如果使用 table 来存储用户的话,是否意味着后台在接收到所有 user 请求时都必须首先检查相应的授权(是否有专门的机制做授权管理?),是否有通用的行业解决方案呢(比如 java 做后台应用,是否有相应的权限管理框架可用)?

    谢谢。

    第 1 条附言    2019-10-23 01:20:38 +08:00
    PS1:框架的话不一定只限定为 java,希望能推荐这方面 art of the state 的解决方案!

    PS2:我看了大家提供的方案好像都是在应用层面做的权限隔离,这样相对于使用数据库本身的权限机制有什么优势吗?

    PS3:这些方案的可拓展型如何?例如能否支持数据库上 GraphQL 引擎的权限控制?
    18 条回复    2019-10-23 22:33:07 +08:00
    qza1212
        1
    qza1212  
       2019-10-22 13:57:39 +08:00
    shiro
    felixin
        2
    felixin  
    OP
       2019-10-22 13:59:50 +08:00
    @qza1212 谢谢,没听说过这个,我去学习一下。
    lspvic
        3
    lspvic  
       2019-10-22 14:00:12 +08:00 via Android
    keycloak
    BrbiwsFtd9zDGZqB
        4
    BrbiwsFtd9zDGZqB  
       2019-10-22 14:00:54 +08:00
    相比 shiro 更推荐 spring security
    lllllliu
        5
    lllllliu  
       2019-10-22 14:12:49 +08:00
    RBAC ?
    felixin
        6
    felixin  
    OP
       2019-10-22 14:19:04 +08:00
    @lllllliu 查了这个词,就是这个意思! 根据用户角色对相应的数据库记录所权限控制
    lllllliu
      &nbs; 7
    lllllliu  
       2019-10-22 14:23:04 +08:00   1
    @felixin #6 昂,那你要把系统里的各个权限分出来的,对于到各个功能组,粒度要很细。
    然后生成权限表。
    然后有个一对多的用户对于权限表。每次用户登录之后后端生成角色权限,然后前端根据权限渲染菜单,如果都是后端渲染,后端 session 里可以存。然后 api 部分可以写个中间件,处理每个请求是否有权限。
    基本的就是这样的,主要是要把模型做好。
    lllllliu
        8
    lllllliu  
       2019-10-22 14:23:56 +08:00
    再细致点可以划分出用户组,用户组对权限,用户对于用户组。
    Ianchen
        9
    Ianchen  
       2019-10-22 14:41:52 +08:00
    自己写 RBAC2
    julyclyde
        10
    julyclyde  
       2019-10-22 18:05:33 +08:00
    用户
    角色
    用户-角色表

    权限
    角色-权限表

    需要授权访问的应用
    应用-权限表
    Vegetable
        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 上找一个论坛类开源项目学习一下。
    Vegetable
        12
    Vegetable  
       2019-10-22 18:25:39 +08:00
    saas 类的系统涉及到了不同组织之间的隔离,变化更多
    mamahaha
        13
    mamahaha  
       2019-10-22 18:31:02 +08:00
    原理倒是不难,想要做到高效+规范就难了
    knight9
       
    knight9  
       2019-10-22 20:37:42 +08:00 via Android
    前几天用 spring boot+shiro 刚写了这个
    felixin
        15
    felixin  
    OP
       2019-10-23 01:07:22 +08:00 via Android
    感谢大家提供的名词,非常有用!按图索骥了解了很多,框架不一定局限于 java,node.js 也可以推荐
    felixin
        16
    felixin  
    OP
       2019-10-23 01:09:20 +08:00 via Android
    发现好多人收藏了这个主题,希望大家能多推荐一些 state of the art 的解决方案
    pythongo
        17
    pythongo  
       2019-10-23 09:06:26 +08:00   1
    Role-Based Access Control. Second Edition.pdf
    有这么一本书,虽然老点,但是理论知识还是可以的。
    felixin
        18
    felixin  
    OP
       2019-10-23 22:33:07 +08:00 via Android
    @pythongo 我去下来看看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2474 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:50 PVG 18:50 LAX 02:50 JFK 05:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86