权限设计总结

    业务系统除了具体的业务之外,最麻烦的就是对于每个成员权限的控制了。最近收拾东西,忽然飘出一张几个月前,进行权限表设计的思路,我觉得还是比较普适的,所以来总结一下。

    权限的控制要么是ACL要么是RBAC,他们具体的介绍看这里

    那么我的设计是RBAC的,既基于角色的访问控制,直接上例子吧。

    为了避免没人看,我把特点或者说优点放在前面吧:

    1)可以针对不同的实体创建不同的权限限制(实体是指如订单、商品等业务实体)。

    2)针对某实体的权力可拓展,针对某实体的权力等级大小也可拓展。

    3)支持多角色用户。

    4)角色可控制不同的实体。

    5)换言之,用户对所有实体都有不同的权限控制。


    以下表字段一切从简,维护性字段就不写了。

    1、首先我们得有个用户表,上面随便弄一些基本属性,以username为主键

    220405_09i6_1247454.jpg

    2、其次角色表得有吧,来一发角色表。

    220932_Nwhl_1247454.jpg

    3、那么考虑到多角色的情况,角色就不能作为一个字段在user表中,角色和用户的关系表得有吧

    221055_PbXg_1247454.jpg

    4、下面就是跟别的权限设计不太一样的地方了,我实现将可能的操作尽可能穷举,那么就设计成酱紫了的一个表。   

    222346_DZ6l_1247454.jpg222145_PhQ6_1247454.jpg

    简单的介绍一下,我弄了一个表称为实体表(entity),它与角色,权力形成一个关系表,称为角色实体权限表吧(简称REP表)。REP表中穷举了可能有的权力,上面即为新增,读取,更新,删除,分派。我将这些权力分级,例如:

    

权力等级含义
0没有权限
10自己可操作
30同一个组织可操作
50所有可操作

    如果我录入了一条权限数据为,假设role_id为1是普通员工权限,entity_id为1为订单实体

idrole_identity_idcan_addcan_readcan_updatecan_delcan_assign
11105030100

    那么这条数据就可以解释成,普通员工权限他对于订单这个实体,没有权限增加订单,可以读取所有订单,可以对跟这个员工同一组织下维护的订单进行更新,可以删除自己创建的订单,并且这个订单他没有权限分派给别人。

    针对如果一个用户有多个角色,那么我们取所有角色对应操作的最大权力作为一个标准,在缓存中维护着这个权限数据,就可以进行权限管控了。

    这里我的权力值使用的是0、10、30、50,这其中其实留了后门,如果我想插入一个权力值位于自己和同一组织之间,例如这个组织下又新建了多个小组,那么我可以使用15作为权力值,这么做是留着用于权力的扩展。

    5、但是,总有操作事先没有考虑到的情况或者一些特殊情况,例如小张在不拥有管理员权限的情况下,拥有管理员的某项权力,我们不可能为了一个人去开一个角色吧,没关系,用一个特殊权限表记录即可。

    224107_Ncwk_1247454.jpg

    alias就是上面的can_read,can_update这些字段,level就是10、30、50这些权力值,entity_id则为实体id,现在估计看明白了,RPE表和这个表的合集不就可以满足上面的需求嘛。

    当然,如果你想要这个特殊权限也是需要配置的,那你为privilege建张表维护即可。

    224331_QxzY_1247454.jpg

    6、看起来整体是这样的

    224414_m2wV_1247454.jpg


    就我暂时使用的情况来说,除了配置起来比较繁琐,暂时还没有不能满足的地方,主要是他可以精确到比较细的粒度,即方便拓展又容易理解,我觉得还不错,个人感觉挺通用的,适合大部分场景,所以拿上来跟大家分享。


    完。

转载于:https://my.oschina.net/sluggarddd/blog/648799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值