一、RBAC模型

1.1、概念

权限设计最常见的就是基于 RBAC 模型。而 RBAC 模型又有 RBAC0、RBAC1、RBAC2、RBAC3 等几种常见的模式。RBAC(Role-Based Access Control) 基于角色的访问控制的设计思想。作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。RBAC 中有4个比较关键的元素:用户 – 角色 – 权限 – 资源。

1.2、 RBAC 支持的安全原则

RBAC 支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则。

最小权限原则:RBAC 可以将角色配置成其完成任务所需的最小权限集合。

责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作。

数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限。

1.3、 RBAC 优缺点

(1)优点:简化了用户和权限的关系。易扩展、易维护。

(2)缺点:RBAC模型没有提供操作顺序的控制机制,这一缺陷使得RBAC模型很难适应哪些对操作次序有严格要求的系统。

1.4、术语解释

(1)、资源:被安全管理的对象(Resources页面、菜单、按钮、订单等)。

(2)、 权限:问和操作资源的许可(Permit删除、编辑、审批等)。

(3)、角色:用户通过业务需求确定一个角色(Role),并按照实际的业务场景,赋予角色对应的权限的过程,角色也可以理解是权限的集合,是众多权限颗粒组成。

(4)、 用户:系统实际的操作员(User)

(5)、操作权限

页面权限:即用户登录系统可以看到的页面,由菜单来控制,菜单包括一级菜单或多级菜单。当系统赋予用户对应菜单的权限,那么用户就可以访问对应的菜单页面。

操作权限:即页面的功能按钮,包括:查看、新增、修改、删除、审核等。当用户点击按钮时,系统将会校验用户的是否包含次操作权限,如果有,就可以进行下一步操作。

数据权限 :数据权限就是用户在同一页面看到的数据是不同的。比如项目管理员,就能看到当前团队正在进行中的项目,以及项目的进度情况。而团队成员,就只能看到本人具体参与的项目,已经项目信息。相对于复杂一项的权限也可以基于组织结构来拓展。

总的来说,一般我们会这样来用一句话更好的理解它:【用户(user:谁)】被赋予【角色(role:具有1-n个权限)】,通过角色关联的【权限(permit:许可)】去访问/操作【资源(resource)】。如下图:

1.5、 RBAC0 模式

这是权限最基础也是最核心的模型,基本上绝大多数就是基于它来建设,包括用户、角色、权限。其中用户和角色可以是多对多的关系;角色和权限也是多对多的关系。用户是发起操作的主体,可以是业务性的访问者、可以是后台管理系统的用户。角色起到了桥梁的作用,连接了用户和权限的关系。由于角色和权限的关系是多对多,而用户与角色也是多对多的关系,所以一个用户就有一个或多个角色一个或多个系统权限(这里关于针对比较简单的系统,例如用户量很小,项目级别也很小的系统,可以采用用户直接和权限关联。也就是添加一个用户,就直接针对用户去添加对应的权限,可以没有角色的概念。针对这种情况,在此不展开讨论)。一般的系统中,引入角色(Role)就是为了提升了系统操作的效率和拓展性。权限是用户可以访问的资源,包括:页面权限、作权限、数据权限等(具体解释看上面的术语部分)。下面用具体的图例来展示:

1.6、RBAC1 模式

RBAC1 模式是RBAC0的拓展。主要是在角色上引入了角色继承(Hierarchical Role)的概念。即角色具有上下级的关系,角色间的继承关系可分为一般继承(General)和受限继承(Limited)关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承,受限继承则增强了职责关系的分离。这种设计可以给角色分组和分层,一定程度简化了权限管理工作。

这里举一个场景例子,比如销售团队,销售主管或经理一般会需要了解并汇总下面销售专员的数据。而销售专员能够管理各自的销售数据。此时,销售主管就需要向下继承销售专员的角色,进而也就拥有了他们的基本权限。

1.7、RBAC2模式

RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制,实现了责任分离。RBAC2中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。该模型有以下几种约束:

(1)互斥角色:同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。

(2)基数约束:一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人有限的。

(3)先决条件角色:可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。指要想获得较高的权限,要首先拥有低一级的权限。

(4)运行时互斥:允许一个用户同时拥有多个角色,但在系统运行中或部分特殊场景不可同时使用这两个角色,只能使用其中一种角色。这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。

静态职责分离(SSD):当角色授权给用户时,需要判断当前用户是否被赋予了一个与新角色冲突的角色,冲突的角色位一个二元关系,任何一个用户在此场景下只能拥有其中一个角色。

动态职责分离(DSD):在角色分配时可以将冲突的角色赋予给同一个用户,但是在用户使用系统时,一次会话中不能同时激活两个角色。

1.8、 RBAC3 模型

即最全面的权限管理,它是基于RBAC0,将RBAC1和RBAC2进行了整合。这种模式即要维护好角色间的继承关系处理好分层,又要处理角色间的责任分离。模型公式:RBAC3 = RBAC1 + RBAC2 。

二、场景实战

2.1 需求场景

我们目前在做一款toB的产品,采用SaaS的模式对外B端客户提供服务。目标就是如何规划好平台的管理、租户的管理、租户应用的管理以及租户业务流程等内容的管理。我们将SaaS平台基本角色分为平台管理员、平台运维、平台开发、租户管理员、租户子管理员、租户其他角色组成。在这里,我将我们SaaS服务的权限部分设计分享出来。

2.2 设计说明

我们这套设计,涉及两部分,即完整的企业组织结构和角色组。所以这里针对部分概念进行说明。

2.2.1 组织(部门)

针对toB的产品,往往要考虑如何支撑起企业的组织结构,比如企业的部门层级。同时组织结构也可以与角色进行关联,用户加入组织后,就会自动获得该组织的默认角色。同时用户在调岗时,只需调整组织、角色即可批量调整。组织的另外一个作用是控制数据权限,把角色关联到组织,那么该角色只能看到该组织下的数据权限。

2.2.2 用户组(角色组)

在系统中,存在相同属性或操作功能的用户存在。随着使用的用户基数增大、角色类型增多时,分配的工作就会越发的繁琐。这里可以增加用户组的概念来统一规划这一部分用户的权限管理。在上面的设计中,角色组中的岗位、职位就充当了这部分的作用。以后其他用户加入对应的用户组(角色组)后,即可自动获取用户组的所有角色。退出用户组,同时也撤销了用户组下的角色,无须管理员手动管理角色。

2.2.3 职位 / 岗位

每个组织部门下都会有多个职位或岗位,比如IT技术部会有技术总监、技术经理、研发组长、开发等职位。虽然都在同一部门,但是每个职位的权限是不同的,职位高的拥有更多的权限。研发总监拥有所有权限,研发组长和开发拥有部分权限。有些特殊情况下,一个人可能身兼多职。

2.2.4 角色

角色是权限控制的最小单位(不是权限的最小单位),通过角色来进行权限资源的分配。在上面的设计中,就是遵循RBAC模式进行的设计。例如管理角色组,就涉及到了RBAC1,主管理员同时拥有子管理员的权限;同时也涉及到了RBAC2,一个组织只能有一个主管理员(基数约束 ),但是可以有多个子管理员。

2.2.5 含有组织、职位、用户组、角色模型

通过根据以上场景,平台的权限模型设计如下图:

以上基本就是关于我们一个项目的权限设计部分。

权限系统设计学习总结(4)—— SaaS 平台多租户模式下权限设计相关推荐

  1. 权限系统设计学习总结(2)——SAAS后台权限设计案例分析

    分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程  saas平台由于其本身"按需购买"的特性,在设计规划权限时,需 ...

  2. php宝塔搭建saas平台多租户多应用多终端系统ThinkPHP6框架

    大家好啊,我是测评君,欢迎来到web测评. 有个朋友问我,有没有SaaS相关的系统,最好是php开发的,今天逛了开源社区,刚好看到这套挺不错的,本期就给大家分享这套bwsaas多端SAAS平台运营系统 ...

  3. 权限系统设计学习总结(3)——多账户的统一登录

    前言 多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,必须现在常用的APP(网易云音乐)登录方式包含:网易.微信.QQ.大部分的 App 都支持使用多个第三方账号进行登录 ...

  4. linux chattr 无权限,从零开始学习Linux(二十八):文件权限之chattr权限

    1.chattr命令 命令格式: chattr [+-=] [选项] 文件名或者目录名: 参数说明: +:增加权限: -:删除权限: = 等于某权限: 选项说明: i:如果对文件设置i属性,则不允许对 ...

  5. linux 移出权限,一起学习在 Ubuntu 上授予和移除 sudo 权限

    导读 如你所知,用户可以在 Ubuntu 系统上使用 sudo 权限执行任何管理任务.在  机器上创建新用户时,他们无法执行任何管理任务,直到你将其加入 sudo 组的成员.在这个简短的教程中,我们将 ...

  6. RBAC经典角色权限系统设计五张表及拓展应用

    大家都知道,权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,现在整理了下,给正在开发此模块的朋友提供一个思路! 设计基础:用户.角色.权限三大核心表,加上用户角色.角色权限两个 ...

  7. saas系统服务器搭建,SaaS平台部署.doc

    <SaaS平台部署.doc>由会员分享,可在线阅读,更多相关<SaaS平台部署.doc(6页珍藏版)>请在人人文库网上搜索. 1.文档来源为 :从网络收集整理.word 版本可 ...

  8. 视频平台完善“青少年模式”,应先“从无到有”再“从有到优”

    在智能产品广泛应用的当下,青少年如何健康使用互联网防沉迷成为社会各界关注热点.今年6 月1 日起,新修订的<中华人民共和国未成年人保护法>正式实施,新法首次为"网络保护" ...

  9. 关于SaaS平台中应对多租户系统模式的权限设计

    概要 在不同的系统中,其实关于权限设计是没有标准方案的.一般地,依据项目需求进行系统的功能规划设计.组织结构设计以及对应的权限设计等即可.权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是 ...

最新文章

  1. 数据库死锁查询及处理
  2. 关于Jstree节点显示无法收缩的解决办法
  3. python 怎么拷贝一个文件到一个新的文件_Python脚本提取不同文件夹里面的文件到一个新的文件...
  4. 顶级程序员的心得 Coders at Work (II)
  5. 如何解决Mac无法写入U盘的问题
  6. dns服务器迁移方法简单说明
  7. Pytorch实现ResNet50网络结构,包含ResNet18,ResNet34,ResNet50,ResNet101,ResNet152
  8. 什么是diff算法?
  9. 404页圈小猫游戏源码
  10. Debian10配置IP地址、DNS、主机名
  11. matlab 绘制可行域内的函数图像
  12. OpenCV——透视变换
  13. 笔记(四)Home Assistant添加小米设备
  14. oracle arc安装教程,ArcSDE Oracle的安装教程
  15. 绵阳计算机维修价格,绵阳台式电脑维修
  16. oracle判断是否是手机号码,oracle存储过程判断手机号码和固话
  17. linux下sybase配置文件,linux下SYBASE数据库安装后的配置
  18. 指针随鼠标移动的flash卡通时钟
  19. 人工神经网络的应用实例,神经网络技术及其应用
  20. 【区块链】研究报告:区块链+供应链金融

热门文章

  1. 377. 组合总和 Ⅳ(JavaScript)
  2. java csv 追加,Java将新列附加到csv文件
  3. 计算机管理器win8,Win8如何快速打开资源管理器,Win8快速打开计算机操作方法
  4. 简单的php引导页面设计,PS简单制作唯美朦胧柔美的渐变APP引导页
  5. java poi 导出excel 速度慢_java POI技术之导出数据优化(15万条数据1分多钟)
  6. 校园网未能找到pppoe服务器6,校园网PPPOE接入认证系统的研究与实现.doc
  7. matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?
  8. java如何无感知部署_干货!如何平稳用户无感知的完成系统重构升级
  9. java数字时钟控件_Java-数字时钟(简易版)
  10. go语言struct各种定义和用法