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
< string string >  userToRole  =   new  Dictionary < string string > ();
        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

转载于:https://www.cnblogs.com/zc22/archive/2007/10/08/917493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值