V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LotteWong
V2EX  ›  数据库

关于 RBAC 设计优化的问题

  •  
  •   LotteWong · 6 天前 · 957 次点击

    采用常见的五表法实现 RBAC 模块( user 、role 、permission 、user-role 、role-permission ),leader 表示每次鉴权都要:user → user-role → role → role-permission → permission,这样做的复杂度略高。现在想了两种方案优化:

    1. 联表查询。存在的问题:因为这个 RBAC 模块同时需要适配 MySQL 和 MongoDB,MySQL 还好处理,MongoDB 的聚合查询有点复杂而且性能不佳。
    2. 加新的表 user-permission 。存在的问题:当用户绑定角色 or 角色绑定权限时,每次都要更新 user-permission 表,写的消耗很大,而且有很多的冗余数据。

    请问 uu 们有没有其它更好的优化方法呀?

    14 条回复    2021-09-18 12:19:07 +08:00
    JaguarJack
        1
    JaguarJack   6 天前
    对于后台而言,一般都是查多写少。一般都是缓存
    LotteWong
        2
    LotteWong   6 天前
    @JaguarJack 现在因为业务限制估计用不了 Redis 之类的,第二种方法有点类似缓存的意思。
    aragakiyuii
        3
    aragakiyuii   6 天前
    单机的?
    fgwmlhdkkkw
        4
    fgwmlhdkkkw   6 天前
    1,role,permission,role-permission 这三个表的信息与用户无关,可以全加载到内存中,最终生成 {role=>permissions}。
    2,通过 user-role 读取每个用户的角色列表,然后做{roles => permissions}的 cache 。
    fgwmlhdkkkw
        5
    fgwmlhdkkkw   6 天前
    @fgwmlhdkkkw #4 permissions 可以用 bitmap
    afirefish
        6
    afirefish   6 天前
    4 楼正解,如果采用的 jwt 认证的话,省至可以省去查询 user 表。弊端就是无法做到用户禁用后马上不能登录。
    learningman
        7
    learningman   6 天前
    全读内存里呗。。。
    jorneyr
        8
    jorneyr   6 天前
    加新的表 user-permission 。存在的问题:当用户绑定角色 or 角色绑定权限时,每次都要更新 user-permission 表,写的消耗很大,而且有很多的冗余数据。

    这个就很好,写能有多大消耗?
    权限更新是一个低频操作,难不成你们的系统没事就高并发改权限吗?
    wqtacc
        9
    wqtacc   6 天前
    鉴权的话,这套模型没问题,但是你需要一个框架,比如 casbin
    leoskey
        10
    leoskey   5 天前
    些简单的代码不容易,“user → user-role → role → role-permission → permission”这个还是蛮清晰的,个人建议不修改原逻辑,加缓存来提高读取性能。
    LotteWong
        11
    LotteWong   5 天前
    @aragakiyuii #3 yes
    @fgwmlhdkkkw #5 新知识😂我来研究一下
    @jorneyr 确实...
    @wqtacc 本来要用的...被 mentor 制止了,说不要搞得那么复杂😂
    @leoskey 缓存一时半会用不上了,甚至没有部署 redis 的意思(狗头.jpg
    aragakiyuii
        12
    aragakiyuii   5 天前 via iPhone
    @LotteWong
    单机就直接读到内存里😂怎么方便怎么来
    wqtacc
        13
    wqtacc   5 天前
    @LotteWong 实际上按照帖子的内容讲,实现了整套的权限体系,但是还是按照最直接的方法去用,虽然理解起来简单,但真正去用不比用 casbin 或者 opa 这类的访问控制引擎低多少
    julyclyde
        14
    julyclyde   2 天前
    role 表单独存在是做什么呢?我觉得 role 的存在意义就“仅仅是 a set of permissions”啊
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   975 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 19:40 · PVG 03:40 · LAX 12:40 · JFK 15:40
    ♥ Do have faith in what you're doing.