RBAC

概念:
基于角色的访问控制。在RBAC中,权限与角色相互关联,用户可通过适当的角色而得到这些角色的权限。

RBAC支持三个著名的安全原则:最小权限原则,责任分离原则,数据抽象原则。
(1)最小权限原则,是RBAC可以将其角色配置成其完成任务所需要的最小的权限集。
(2)责任分离原则可以通过调用相互独立互斥的角色来共同完成敏感的任务而体现,比如要求一个计帐员和财务管理员共参与同一 过帐
(3)数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。然而这些原则必须通过RBAC各部件的详细配置才能得以体现。
特点:
RBAC模型支持最小权限原则、责任分离原则,这些原则是任何组织的管理工作都需要的。这就使得RBAC模型有广泛的应用前景。
RBAC模型支持数据抽象原则和继承概念。由于目前主流程序设计语言都支持面向对象技术,RBAC的这一特性便于在实际系统中应用实现。
模型中概念与实际系统紧密对应。RBAC模型中的角色、用户和权限等概念都是实际系统实际存在的实体,便于设计者建立现存的或待建系统的RBAC模型。

接下来,实现代码.
首先你的添加角色,给用户设置角色,这里就不详细介绍了。下来添加节点(权限)
父级权限要实现无限极分类。
节点入库之后,应该是这样
分配权限
< table border= "0" height= "170" >
< foreach name= "authority" item= "value" >
< tr style= " border-bottom: 1 px solid ;border-top: 1 px solid ;border-left: 1 px solid" >
< td style= " border-right: 1 px solid" >< input type= "checkbox" name= "quan_id[]" class= "fa" value= "{$value.q_id}" >{$value.authority_name}</ td >
< foreach name= "value['son']" item= "val" >
< td >
&nbsp;&nbsp; &nbsp;&nbsp; < input type= "checkbox" name= "quan_id[]" class= "son" pid= "{$val.pid}" value= "{$val.q_id}" >{$val.authority_name}
</ td >
</ foreach >
</ tr >
</ foreach >
</ table >
同时,增强用户体验可以加点小特效
< script >
//点父级子级全部选中
$ ( function (){
$ ( ".fa" ). click ( function (){
var status2 = $ ( this ). prop ( "checked" );
var nid = $ ( this ). val ();
var son = $ ( ".son" );
for ( var i = 0 ; i < son . length ; i ++)
{
if ( son . eq ( i ). attr ( "pid" )== nid )
{
son . eq ( i ). prop ( "checked" , status2 );
}
}
})
//点子级选父级
$ ( ".son" ). click ( function (){
var status3 = $ ( this ). prop ( "checked" );
var nid2 = $ ( this ). attr ( "pid" );
var fa = $ ( ".fa" );
for ( var i = 0 ; i < fa . length ; i ++)
{
if ( fa . eq ( i ). val ()== nid2 )
{
fa . eq ( i ). prop ( "checked" , true );
}
}
})
})
</ script >

给角色分配完权限,入库到角色-权限表中
$d [ 'role_id' ]=I( 'post.role_id' );
$quan_id =I( 'post.quan_id' );
$biao =M( 'role_authority' );
$arr = array ();
foreach ( $quan_id as $value )
{

$tmp [ 'role_id' ]= $d [ 'role_id' ];
$tmp [ 'quan_id' ]= $value ;
$arr []= $tmp ; //$arr是二维数组
}
$d = $biao ->addAll( $arr );
if ( $d )
{
$this ->success( 'ok' ,U( 'Authority/allocation_authority' ), 1 );
}

用户在登录时,就应该把他的角色,权限查出来,存到session中,这样可以减轻数据库的压力.所以我们在登录验证正确时,就应该顺便把他的权限查出来。
$aut = $this ->getall( $uid ); //登录控制器里,调用getall方法。
session( 'aut' , $aut );
/*
* 取出权限
* @[author]超
*/
public function getall( $uid )
{
$biao =M( 'user' );
$role_id = $biao ->where( "id=' $uid '" )->getField( 'role_id' , true ); //取出用户的角色id
$r_id = implode ( ',' , $role_id );
$biao2 =M( 'role_authority' );
$a = $biao2 ->join( "authority on role_authority.quan_id=authority.q_id" )->where( "role_id in ( $r_id )" )->select();
return $a ; //$a 是二维数组
}

在公共控制器进项验证(参考非法登录文件)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值