美文网首页
设计一个权限系统

设计一个权限系统

作者: NEU_PROYZ | 来源:发表于2021-11-13 11:44 被阅读0次

    对于任何一个成熟的系统而言,如何设计权限体系,是我们在项目设计之初就应该考虑的。在笔者看来,一个完善的权限系统可以在保证业务逻辑正确的前提下,尽量保证代码的简洁性和可扩展性。

    关系模型

    我们需要思考如下几个概念之间的关系:

    1. 用户。
    2. 角色:权限的载体。一个合法用户应该有一个或多个角色。
    3. 资源:系统的模块,需要区分不同权限。
    4. 角色权限:某个角色对某个资源type具有的权限。
    5. 内容权限:某个用户对某个资源id的权限。

    除此之外,我们还应考虑用户是否有组的概念,比如:部门。我们可以把不同的组称作域(组或许还有层级关系)或者项目组。此时,角色或者角色权限就需要挂载在组的概念下。

    image.png

    角色-资源的权限:上图左上角。
    重点理解用户-资源id的权限:上图左下角。
    在实际设计中,需要根据不同的需求进行简化或者补充。

    权限点

    权限点如何定义?有权限就是1,没权限就是0?那显然是不够的,举个例子:

    eg:对于一个资源列表,对不同角色可以粗略的分为以下权限点:
    list(查看),edit(编辑),delete(删除)等。

    实现:权限点最好的实现方式枚举类。同时,每个枚举类的数值型标识,采用2的n(n>=0)次幂的方式递增,这样的好处在于,我们可以用位运算来判断权限。
    例如:以上3个权限的code分别为:1,2,4。
    若此时新增一个管理的权限,那么他的权限可能是上述所有权限的并集:list | edit | delete = 7。
    查询一个角色是否有删除权限:operation & delete == delete,其实就是判断对应的位上是否为1。

    相关文章

      网友评论

          本文标题:设计一个权限系统

          本文链接:https://www.haomeiwen.com/subject/akdgaltx.html