RBAC 权限入门

RBAC 权限入门

RBAC概念

RBACRole Based Access Control,核心是用户只和角色关联,而某角色可以拥有各种各样的权限并可继承。

RBAC白话介绍

RBAC有很多模型,最简单的就是Core RBAC说白了就是User用户, Role角色, Permission许可 三个对象。

l         角色有多个操作许可

l         当用户分配了一个角色,就有了这个操作。

那么在程序里面怎么实现呢?很简单。

首先我们有一系列操作,例如Open File, Close File, Save File等。在代码里面可以一些方法。

然后我们有多个角色,例如Manager, Worker

他们之间的对应关系如下,一般写在配置文件或者保存在数据库。


当进行权限验证的时候,就是看这个用户的角色是否包含这个动作的permission.

class RBCA
    {
        Dictionary
<stringstring> userToRole = new Dictionary<stringstring>();
        Dictionary
<string, List<string>> roleToPermission = new Dictionary<string, List<string>>();

        
public RBCA()
        {
            
//初始化manager的权限

            
string manager = "Manager";

            List
<string> managerlist = new List<string>();
            managerlist.Add(
"OpenFile");
            managerlist.Add(
"CloseFile");
            managerlist.Add(
"SaveFile");


            
//初始化worker的权限

            
string worker = "Worker";

            List
<string> workerlist = new List<string>();
            workerlist.Add(
"OpenFile");

            roleToPermission.Add(manager, managerlist);
            roleToPermission.Add(worker, workerlist);


            
//初始化用户pixysoft的角色

            
string user = "pixysoft";
            userToRole.Add(user, manager);
        }

        
public void OpenFile(string user)
        {
            
string role = userToRole[user];

            
//检测权限

            
if (!roleToPermission[role].Contains("OpenFile"))
                
return;

            Console.Write(
"Open file succeed!");
        }

        
public void CloseFile(string user)
        {
            
string role = userToRole[user];

            
//检测权限

            
if (!roleToPermission[role].Contains("CloseFile"))
                
return;

            Console.Write(
"CloseFile succeed!");
        }

        
public void SaveFile(string user)
        {
            
string role = userToRole[user];

            
//检测权限

            
if (!roleToPermission[role].Contains("SaveFile"))
                
return;

            Console.Write(
"SaveFile succeed!");
        }
    }

一个超级简单的RBAC就体现出来的,但是没有任何实用价值。下面我会使用AOP思想去实现这个权限系统。

RBAC优缺点分析

优点在于:

l         易用和高效的授权方式 :用户在进行授权时只需对角色进行授权,之后将相应的角色分配给用户即可。

l         简便和高效的授权模型维护 :在技术角度来讲,进行授权模型的维护上因为基本只需要维护关联模型而显得简单而高效。

缺点在于:

l         复杂的权限校验 :在进行权限校验时需要不断的遍历和递规,造成了性能的影响。

l         对于数据权限的不够支持 :没有明确的数据权限模型,可以看到在经过重构的数据权限模型其实已经和 RBAC 模型有一定的出入,而且在数据权限的校验上实现起来是非常的低效。

参考资料

http://www.blogjava.net/BlueDavy/archive/2005/05/18/4745.html

http://www.blogjava.net/renyangok/archive/2006/12/06/85838.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文

华为笔记本电脑的外型真的很时尚&#xff0c;以及其轻薄便捷的特色&#xff0c;迅速吸引力一大波粉丝。目前的华为笔记本电脑使用的操作系统基本是win10系统了&#xff0c;win10系统升级经常出现错误&#xff0c;下面小编就给你讲解下U盘重装win10的方法。喜欢完游戏的朋友来说…

设计模式之建造者

建造者(生成器)模式含义&#xff1a;生成器模式是一种创建型模式&#xff0c;使你能够分步奏创建复杂对象&#xff0c;可使用相同的创建代码生成不同类型和形式的对象。看图我们就能很好地理解&#xff0c;图中就是工厂中的流水线模式&#xff0c;建造者就好比整条流水线&#…

索尼服务器维护时间,索尼云服务器

索尼云服务器 内容精选换一换如果密码丢失、或创建时未设置密码&#xff0c;推荐您在控制台设置登录密码。更新后端云服务器&#xff0c;可修改字段为后端云服务器的名称和权重&#xff0c;可以为性能好的服务器设置更大的权重&#xff0c;用来接收更多的流量。如果后端云服务器…

刚刚,陶哲轩惨遭3个物理学家狠狠打脸,一条数学公式或将引起教科书改革

这波操作把数学界都炸懵了就在刚刚&#xff0c; 3 位物理学家联合数学天才、菲尔兹奖得主陶哲轩&#xff0c;彻底炸翻了数学界。左往右&#xff0c;彼得丹顿、斯蒂芬帕克、张西宁彼得丹顿&#xff08;Peter B.Denton&#xff09;&#xff0c;美国布鲁克黑文国家实验室的助理物理…

教材管理系统紧张开发中

教材管理系统紧张开发中&#xff0c;系统也许不大&#xff0c;可是业务比较复杂、交叉性很强&#xff0c;教学计划、课程代码、教材、供货商、分校点、系部、教师、学生、库存、盘点、结算、数据采集、征订、订购、分发、收费一个都不能少&#xff01;既有C/S三层又有Web模式&a…

Blazor 组件之间使用 EventCallback 进行通信

翻译自 Waqas Anwar 2021年3月28日的文章 《Communication between Blazor Components using EventCallback》 [1]Blazor 应用程序是相互交互的多个 Blazor 组件的集合&#xff0c;我们可以在其他父组件中使用子组件。在实际的应用程序中&#xff0c;将数据或事件信息从一个组件…

***教程十:数据库注入(上)

这一段的教程是笔者&#xff08;这里应该叫整理者&#xff09;由《***X档案》的教程中整理改编而来。不知道是什么时候&#xff0c;B/S结构的软件越来越普及。工程师们为了应对“用户皆白痴”的服务理念&#xff08;就是把用户想像成什么都不会&#xff09;&#xff0c;所以更加…

服务器精益改善系列,精益生产改善的内容是什么?

精益生产管理改善的内容包含了生产管理过程中的方方面面&#xff0c;如果可以准确理解的话&#xff0c;请从以下三个方面来理解&#xff1a;首先是精益生产管理六大产出&#xff0c;即PQCDSM&#xff0c;就是精益生产管理改善的第一层内容。其中PQCDSM分别代表了P&#xff1a;P…

当代大学查寝奇葩操作大赏 | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源 阿粪青&#xff0c;侵权删&#xff09;

mysql学习笔记之mysqlparameter(摘)

在.net中操作数据库的时候。 大家都喜欢用sqlparameter。 parameter是预编译的&#xff0c;可以加快速度&#xff0c;也可以防注入。 在使用mssql的时候用sqlparameter。 在使用mysql的时候使用mysqlparameters。 第一次使用mysql的时候&#xff0c;都经常犯一个错误 比如在使用…

.net LTS3.1升5.0和LTS6.0隐蔽的坑

下面这段代码就是把ascll为0到127值 &#xff0c;转成string&#xff0c;并判断在字符串中的位置&#xff0c;第5&#xff0c;6行代码分别用了两种IndexOf方法的重载。for (var i 0; i < 128; i) {var str1 ((char)i).ToString();var str2 $"---------------{str1}-…

Java正则表达式获取网页所有网址和链接文字

/*获取网址首页的所有网址和链接文字*/import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.Lis…

学习烂到留级,却凭着正经发表的第一篇论文,优雅斩获诺贝尔奖

全世界只有3.14 %的人关注了青少年数学之旅照片里的男人&#xff0c;得意但很谦逊&#xff0c;他是诺贝尔化学奖创设以来最年轻得主——田中耕一。诺贝尔奖通知的那一天 叮铃叮铃叮铃......正在加班的田中耕一掏出手机&#xff0c;这是一个陌生的跨洋电话。电话那头的外国人…

CakePHP Pagination (分頁功能) 加入自己的參數

如果還不知道什麼是 Pagination 或者還不了解如何使用&#xff0c;請參考&#xff1a; CakePHP Pagination (分頁功能) 。通常在管理後台實作時&#xff0c;常設定許多查詢條件來查詢資料&#xff0c;比如&#xff1a;起始、結束時間。通常這些參數都是用GET的方式在傳遞。以下…

基于事件驱动架构构建微服务第2部分:领域对象和业务规则

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part2-domain-objects-and-business-rules/在本文中&#xff0c;我将实现领域模型&#xff1a;EduSync.Speech.Domain这是包含核心域的最内层。它包含我们的领域对象和业…

qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器

qt判断tcp客户端是否连接服务器 内容精选换一换本章节指导您使用MongoDB客户端&#xff0c;通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景&#xff1a;弹性云服务器的操作系统以Linux为例&#xff0c;客户端本地使用的计算机系统以Windows为例。目…

谈谈为什么我们需要云原生架构?

未来的软件&#xff0c;从诞生起&#xff0c;就是生在云上&#xff0c;长在云上的。这个说法绝对不是没有根据的&#xff0c;看看现在的互联网大厂在做的事情&#xff0c;你就知道了&#xff1a;阿里宣布成立云原生技术委员会&#xff0c;并投入数十亿大力推动阿里经济体全面云…

服务器系统设计方案,服务器集群方案设计

当前主流的集群方式包括以下几种&#xff1a;1.服务器主备集群方式服务器主-备方式由一台服务器在正常运行状态提供对外服务&#xff0c;其它集群节点作为备份机&#xff0c;备份机在正常状态下不接受外部的应用请求&#xff0c;实时对生产机进行检测&#xff0c;当生产机停机时…

快别发语音了! | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源千叶的堕天使绅士猫_呜喵0w0&#xff0c;侵权删&#xff09;我们无论遇到什么困难&#xff0c;都不要怕&#xff0c;微笑着面对它&#xff01;消除恐惧的最好方法就是面对恐惧&#xff01;

软件项目管理概览----版本控制

随着软件项目规模的不断扩大&#xff0c;项目管理的作用变得越来越重要。如果一个需要长期维护的项目不能得到很好的管理与控制&#xff0c;“软件腐败”就会发生&#xff0c;用不了多久&#xff0c;我们的程序可能就会像一团拌好的炸酱面一样难以找到头绪&#xff0c;维护的成…