转:RBAC权限控制
- 粗粒度:表示类别级。即仅考虑对象的类别,不考虑对象的某个特定实例。譬如,用户管理中,增删改查,对所有的用户都一视同仁,并不区分操作的具体对象实例。
- 细粒度:表示实例级。即需要考虑具体对象的实例,当然,细粒度是在考虑粗粒度的对象类别之后才再考虑特定实例。譬如,合同管理中,列表、删除,需要区分该合同实例是否为当前用户所创建。
- 细粒度的权限判断必须要在资源上建模权限分配的支持信息才可能得以实现。这样,又引入了 Owner 概念。
- 譬如,如果要求创建者和普通用户看到不同的信息内容,那么资源本身应该有其创建者的信息。如同 Unix 的每一个文件(资源),都定义了对 Owner, Group, All 的不同操作属性。
- 细粒度的权限常常具有相当大的业务逻辑相关性。
- 对不同的业务逻辑,常常意味着完全不同的权限判定原则和策略。相比之下,粗粒度的权限更具通用性,将其实现为一个架构,更有重用价值;而将细粒度的权限判断实现为一个架构级别的东西就显得繁琐,而且不是那么的有必要,用定制的代码来实现就更简洁,更灵活。
页面需要展示一个数据集(dataset),那么对某些列的展示、可读、可写的控制,是否要放在权限系统中解决?
- Who:权限的拥用者或主体(如 User、Group、Role 等);
- What:权限针对的对象或资源(Resource、Class);
- How:具体的权限(Privilege)。
- 正向授权在开始时假定主体没有任何权限,然后根据需要授予权限,适合于权限要求严格的系统。
- 负向授权在开始时假定主体有所有权限,然后将某些特殊权限收回。
- Operator:操作。表明对 What 的 How 操作。
- 也就是 Privilege+Resource ;
- 注意,这里的 Resource 仅包括 Resource Type 不表示 Resource Instance;
- 之所以将 What 和 How 绑在一起作为一个 Operator 概念,而不是分开建模再建立关联,这是因为很多的 How 对于某个具体 What 才有意义。譬如,发布操作对新闻对象才有意义,对用户对象则没有意义。
- Role:角色,一定数量的权限的集合。权限分配的单位与载体,目的是隔离 User 与 Privilege 的逻辑关系;
- Group:用户组,权限分配的单位与载体。权限不考虑分配给特定的用户而给组。组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限。User 与 Group 是多对多的关系。Group 可以层次化,以满足不同层级权限控制的要求。
- Session: 会话是用户与激活的角色集合之间的映射。每个 Session 和单个的 User 关联,每个 User 可以关联到一或多个 Session 。
- 最小权限原则(即细粒度控制原则):
- RBAC 可将其角色配置成其完成任务所需要的最小权限集;
- 责任分离原则
- 通过调用相互独立互斥的角色来共同完成敏感的任务而体现,如要求一个计帐员和财务管理员一起参与同一个过帐;
- 数据抽象原则
- 通过权限的抽象来体现,如财务操作用借款、存款等抽象权限。
图1 RBAC 0 模型
|
- RBAC 定义了 五个基本数据元素:
- 用户 users(USERS)
- 角色 roles(ROLES)
- 目标 objects(OBS)
- 操作 operations(OPS)
- 许可权 permissions(PRMS)
- RBAC0 业务规则有:
- 一个用户可以对应多个角色,一个角色也可以分配给多个用户;
- 一个角色可以有多个许可权,一种许可权则只与一个角色对应;
- 用户可以发起会话,会话中可以激活多个角色来获取许可权;
- 用户、角色、许可权全部由超级管理员创建与指派;
- 一个用户拥有多个角色时,高优先级的角色权限覆盖低优先级的角色权限。
- 创造权限
- 分配权限
- 使用权限
- Creator 创造权限:这里完成的是 Privilege 与 Resource 的对象声明;
- Administrator 分配权限:把 Privilege 与 Resource Instance 真正关联到一起,产生了 Operator (Privilege Instance)。Administrator 利用 Operator 这个基本元素,来创造他理想中的权限模型,如创建角色,创建用户组,给用户组分配用户,将用户组与角色关联等;
- User 使用权限
参考资料:
转:RBAC权限控制的更多相关文章
- yii2 rbac权限控制详细操作步骤
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_description本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...
- yii2 rbac权限控制之菜单menu详细教程
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- yii2搭建完美后台并实现rbac权限控制实例教程
1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 或者参考yii2实战教程之详细安装步骤 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/con ...
- Kubernetes-16:一文详解ServiceAccount及RBAC权限控制
一.ServiceAccount 1.ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) ...
- yii2搭建完美后台并实现rbac权限控制案例教程
作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...
- 基于thinkphp的RBAC权限控制
RBAC Role-Based Access Control 权限控制在后台管理中是十分常见的,它的模型大体上是下面这张图的形式 我用的字段和上面不一样,图只是个示例 一个简易的权限控制模型只需要3 ...
- PHP RBAC权限控制,基于CI框架(版本3.1.9)
2018年11月7日更新:目前功能已做到事件级别权限控制,如:后台用户的添加操作.删除操作和保存操作等具体到事件级的操作方法有权限则展示相应的操作菜单,没权限则隐藏相应菜单或提示无权限到目前算是真正做 ...
- Yii2搭建后台并实现rbac权限控制完整实例教程
.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际 ...
- 基于SpringSecurity实现RBAC权限控制(待完善)
Spring Security是一个为企业应用系统提供声明式的安全访问控制功能,减少为了企业应用系统安全控制而编写的大量重复代码. 认证: spring security的原理就是使用很多的拦截器对U ...
随机推荐
- DDL失败案例
问题描述 今天对线上某个业务的大表120G进行重建表操作时遇到报错,该表有个比较显著的特征是*写入量比较大,每天写入加更新的频率在数千万级别.大致的环境 1 版本:Percona 5.6.24 2 操 ...
- WPF ItemsControl 手动刷新
原文:WPF ItemsControl 手动刷新 遇到这样一个问题, 我的ItemsSource是绑定到一个ObservableCollection<T>类型的实力上去的. 但是T类型没有 ...
- Django学习之天气调查实例(2):显示数据表数据
数据表数据添加后,如添加3条用户信息,分别为“aaa”.“bbb”.“ccc”,现在通过代码的方式显示数据表中的数据. 1.在website项目文件夹中创建 userload.py文件,并且写如下代码 ...
- 接口测试工具postman(三)添加断言
每个用例执行完成后,可以通过添加断言来判断返回结果是否正确,即表示用例执行是否成功. 官方说明文档:https://learning.getpostman.com/docs/postman/scrip ...
- selenide 自动化UI测试中Configuration全局配置项目
selenide 在测试过程中需要设置许多的默认值,方便在测试过程中进行和很好的使用.下面我们在selenide中的api引用过来看看! static Configuration.AssertionM ...
- PAT——乙级1015/甲级1062:德才论
这两个题是一模一样的 1015 德才论 (25 point(s)) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德 ...
- 目标检测之Faster-RCNN的pytorch代码详解(模型准备篇)
十月一的假期转眼就结束了,这个假期带女朋友到处玩了玩,虽然经济仿佛要陷入危机,不过没关系,要是吃不上饭就看书,吃精神粮食也不错,哈哈!开个玩笑,是要收收心好好干活了,继续写Faster-RCNN的代码 ...
- flask - 1
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Worl ...
- 微信公众号开发java框架:wx4j(MaterialUtils篇)
wx4j-MaterialUtils的使用 函数说明:上传永久视频素材 参数:文件路径.视频描述(通过setter填充内容即可) 返回值:微信服务器返回的json字符串 public static S ...
- 201621044079WEEK06-接口、内部类
作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...