Toc
  1. 以下为 mindmanager 的预览
  • RABC
    1. 概述
      1. RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。
      2. RBAC 认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作,也就是“主体”对“客体”的操作。
    2. 组成
      1. User
      2. Role
      3. Resource(Permission)
    3. 扩展
    4. 分类
      1. 基本模型RBAC0
      2. 角色分层模型RBAC1
      3. 角色限制模型RBAC2
      4. 统一模型RBAC3
      5. 基于RBAC的延展——用户组
    5. 实例
      1. 实体
      2. 关系
  • 其他
    1. ABAC
    2. DAC
      1. 案例
    3. MAC
      1. 案例
      2. 要素
    4. SAM
  • Toc
    0 results found
    Tako
    RBAC权限模型 - 基于角色的访问控制
    2022/02/21 笔记 导图 鉴权

    以下为 mindmanager 的预览

    RABC

    概述

    权限管理模型

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。


    RBAC是一套成熟的权限模型。在传统权限模型中,我们直接把权限赋予用户。
    而在RBAC中,增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。

    在RBAC中,根据权限的复杂程度,又可分为RBAC0、RBAC1、RBAC2、RBAC3。
    其中,RBAC0是基础,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级。我们可以根据自家产品权限的复杂程度,选取适合的权限模型。

    RBAC 认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作,也就是“主体”对“客体”的操作。

    Who:是权限的拥有者或主体(如:User,Role)。

    What:是操作或对象(operation,object)。

    How:具体的权限(Privilege,正向授权与负向授权)。

    组成

    User

    用户

    Role

    角色

    分类

    • admin

    • user

    • ……

    Resource(Permission)

    权限/资源

    分类

    • 功能权限

      • 模块
    • 菜单权限

      • 页内按钮操作
    • 数据级

    • uri权限

      • 页面,代表前端路由地址

      • 按钮,代表后端接口地址

    扩展

    用户组

    菜单

    分类

    基本模型RBAC0

    介绍

    • RBAC0是基础,很多产品只需基于RBAC0就可以搭建权限模型了。
      在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。
      用户拥有的权限等于他所有的角色持有权限之和。

    • 举例

      • 譬如我们做一款企业管理产品,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。
        这时候,可以抽象出几个角色,譬如销售经理、财务经理、市场经理等,然后把权限分配给这些角色,再把角色赋予用户。
        这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。
        此外,如果一个用户有多个角色,譬如王先生既负责销售部也负责市场部,那么可以给王先生赋予两个角色,即销售经理+市场经理,这样他就拥有这两个角色的所有权限。

    RBAC0模型图

    • ……

    RBAC0适用场景

    评价

    角色分层模型RBAC1

    RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。
    简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。


    举例

    • 基于之前RBAC0的例子,我们又发现一个公司的销售经理可能是分几个等级的,譬如除了销售经理,还有销售副经理,而销售副经理只有销售经理的部分权限。
      这时候,我们就可以采用RBAC1的分级模型,把销售经理这个角色分成多个等级,给销售副经理赋予较低的等级即可。

    角色限制模型RBAC2

    RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。
    这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。

    • 静态职责分离SSD(Static Separation of Duty)

    • 动态职责分离DSD(Dynamic Separation of Duty)。


    举例

    • 还是基于之前RBAC0的例子,我们又发现有些角色之间是需要互斥的,譬如给一个用户分配了销售经理的角色,就不能给他再赋予财务经理的角色了,否则他即可以录入合同又能自己审核合同;
      再譬如,有些公司对角色的升级十分看重,一个销售员要想升级到销售经理,必须先升级到销售主管,这时候就要采用先决条件限制了。

    统一模型RBAC3

    RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。

    RBAC3= RBAC1 + RBAC2

    基于RBAC的延展——用户组

    基于RBAC模型,还可以适当延展,使其更适合我们的产品。譬如增加用户组概念,直接给用户组分配角色,再把用户加入用户组。
    这样用户除了拥有自身的权限外,还拥有了所属用户组的所有权限。


    譬如,我们可以把一个部门看成一个用户组,如销售部,财务部,再给这个部门直接赋予角色,使部门拥有部门权限,这样这个部门的所有用户都有了部门权限。
    用户组概念可以更方便的给群体用户授权,且不影响用户本来就拥有的角色权限。

    实例

    实体

    用户表user

    • id

    • ……

      • 其他用户相关信息

    角色表role

    • id

    • pid

    • name

      • 角色名称
    • status

      • 是否禁用
    • updated_time

    • created_time

    权限表permission

    • id

    • name

    • url

    • status

    关系

    用户角色表 UA

    • id

    • uid

    • role_id

    • created_time

    权限角色表 PA

    • id

    • role_id

    • per_id

    • created_time

    其他

    ABAC

    基于属性的权限验证(ABAC: Attribute-Based Access Control)

    DAC

    案例

    文件系统

    自主访问控制(DAC: Discretionary Access Control)

    MAC

    强制访问控制(MAC: Mandatory Access Control)

    案例

    政府机密文件

    要素

    控制体

    权限标识

    用户

    • 权限标识

    SAM

    SAM(Security Access Manager)

    有赞

    打赏
    支付宝
    微信
    本文作者:Tako
    版权声明:本文首发于Tako的博客,转载请注明出处!