felixin
V2EX  ›  数据库

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

  •  1
     
  •   felixin · Oct 22, 2019 · 3004 views
    This topic created in 2424 days ago, the information mentioned may be changed or developed.

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

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

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

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

    谢谢。

    Supplement 1  ·  Oct 23, 2019
    PS1:框架的话不一定只限定为 java,希望能推荐这方面 art of the state 的解决方案!

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

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

    权限
    角色-权限表

    需要授权访问的应用
    应用-权限表
    Vegetable
        11
    Vegetable  
       Oct 22, 2019   ❤️ 1
    RBAC 的 R 是 Role,不是 User。

    如果你说的多用户是像 V 站这样的系统,你和我都是 User,我们的 Role 是同样的( User ),livid 的 Role 是超级管理员( SU ),所以我们和他权限不同,根据不同的角色来区分权限的策略,就是 Role-Based Access Control。

    你发了这个帖子,你可以将这个帖子下沉一天,livid 也可以,因为发帖人本人拥有下沉自己帖子的权限,livid 有下沉所有帖子的权限。但是我不可以沉你的帖子,因为这个帖子在数据库中关联了你这个用户。
    也就是说,所有用户会出现在数据库的一张用户表中,所有帖子也保存在一张帖子表中,通过一个 user_id 字段来区分发帖人。

    没错,应该有通用中间件来做权限验证。

    建议去 github 上找一个论坛类开源项目学习一下。
    Vegetable
        12
    Vegetable  
       Oct 22, 2019
    saas 类的系统涉及到了不同组织之间的隔离,变化更多
    mamahaha
        13
    mamahaha  
       Oct 22, 2019
    原理倒是不难,想要做到高效+规范就难了
    knight9
        14
    knight9  
       Oct 22, 2019 via Android
    前几天用 spring boot+shiro 刚写了这个
    felixin
        15
    felixin  
    OP
       Oct 23, 2019 via Android
    感谢大家提供的名词,非常有用!按图索骥了解了很多,框架不一定局限于 java,node.js 也可以推荐
    felixin
        16
    felixin  
    OP
       Oct 23, 2019 via Android
    发现好多人收藏了这个主题,希望大家能多推荐一些 state of the art 的解决方案
    pythongo
        17
    pythongo  
       Oct 23, 2019   ❤️ 1
    Role-Based Access Control. Second Edition.pdf
    有这么一本书,虽然老点,但是理论知识还是可以的。
    felixin
        18
    felixin  
    OP
       Oct 23, 2019 via Android
    @pythongo 我去下来看看
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   920 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 20:55 · PVG 04:55 · LAX 13:55 · JFK 16:55
    ♥ Do have faith in what you're doing.