场景:
标准的RBAC,授权只应该赋予角色,再把角色指派给用户,当需要对特定用户授予权限时,就只能新建一个角色指派给这个用户。这就意味着每对一个新用户做特别授权都要创建一个特别角色。

今天脑洞大开,想到C#对于string类型的设计思路似乎可以用在特定用户授权上。

引用型角色设计:

这种设计特点和C#的string引用方式相似,对于相同的特别授权列表,引用的是同一个角色,当特别授权变化时,创建或者指派已存在的权限相同的引用角色。引用角色不会显示在前端,只会在后端处理,也不需要操作者主动创建,前端直接写成给用户添加特别授权即可。

场景

  1. 当前需要给A用户添加Api1、Api3、Api10接口授权,hash权限声明列表{Api1, Api3, Api10},不存在相同权限的角色,建立一个引用角色Role233并指派给A用户,然后hash这个RoleA的授权列表。
    对B用户添加Api1、Api3、Api10接口授权,hash权限声明{Api1, Api3, Api10},通过hash值查找引用角色,查找到Role233有相同的授权,将Role233指派给B用户。此时Role233指派给了A和B。

此时:
A用户——Role233
B用户——┘

对A用户撤销Api1接口授权,添加Api6接口授权,hash权限声明{Api6, Api10},查找引用角色,角色不存在,创建引用角色Role666,并指派给A用户,撤销Role233角色指派。

此时:
A用户——Role666——{Api6, Api10}
B用户——Role233——{Api1, Api3, Api10}

  1. 撤销B用户的特别授权,撤销Role233对B用户的指派,Role233无用户关联,删除Role233。

此时:
A用户——Role666——{Api6, Api10}
B用户——None

RBAC用户特别授权的思考的更多相关文章

  1. 扩展RBAC用户角色权限设计方案(转载)

    扩展RBAC用户角色权限设计方案  来源:https://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html https://blog.csd ...

  2. 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限

    基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...

  3. RBAC用户权限管理数据库设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  4. [转]扩展RBAC用户角色权限设计方案

    原文地址:http://www.iteye.com/topic/930648 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地 ...

  5. 扩展RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  6. RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用 户-角色 ...

  7. Django RBAC用户权限设计方案

    RBAC基于用户权限系统设置方案 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干 ...

  8. RBAC用户权限管理数据库设计【转载】

    本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...

  9. RBAC用户角色权限设计方案【转载】

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

随机推荐

  1. ISP PIPLINE (九_2) Denoise 之 time domain denoise

    时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...

  2. 关于DataTable序列化的事儿

    今天写了一个小demo,从数据库中读取到了dataTable,想序列化成json字符串,然后传到前端,进行页面展示,其实很简单的一个步骤,谁知道它出错了!!! 出错的原因是:序列化类型为XX的对象时检 ...

  3. 解决Idea GitLab Clone failed: Authentication failed for的问题

    刚使用GitLab做项目管理,在idea-check versionControl中使用git clone工程,一直报Clone failed: Authentication failed for ‘ ...

  4. jquery中$.each()的用法

    each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...

  5. D. Frets On Fire 前缀和+二分

    这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...

  6. Jvm 内存模型 —— GC

    一.Jvm 原理 二.Jvm 运行时数据区( Run-Time Data Areas ) (主要是关于 non-stack 区域的详细划分) 从上图可以清楚地看到:程序计数器.Jvm 栈.本地方法栈 ...

  7. python爬虫第五天

            cookie           我们访问网页是通过http协议进行的,而http协议是一个无状态协议(无法维持会话之间的状态),比如我们登录一个网站成功后访问另一个网页,那么登录状态 ...

  8. python爬虫第三天

        DebugLog实战         有时候我们需要在程序运行时,一边运行一边打印调试日志.此时需要开启DebugLog.         如何开启:         首先将debugleve ...

  9. linux mysql 安装

    操作系统 Centos 7.2以上版本 操作系统 centos 7.2以上版本 mysql 版本 mysql-5.7.23-el7-x86_64.tar.gz 1.1 安装准备 1.  创建安装文件存 ...

  10. python获取函数注释 __doc__

    使用 help  函数 可以查看 函数的注释内容 但是它也有点"添油加醋" 其实函数的注释被保存在 __doc__属性里面  PS 双下划线 def f(): "&quo ...