RBAC(Role-Based Access Control)角色访问控制提供了一种高效的用户-权限控制,它引入了Role概念把用户和权限隔离,它把聚合一个或者多个权限聚合,用户通过与其建立会话来得到权限.
它的应用带来的直接后果是效率的提高--你不用为每个拥护赋予权限.
对比自己开发时写的权限控制--用户权限登陆时每项操作权限存储在SESSION中,在每个具体行为执行前判断SESSION中对应成员值来控制是否执行. RBAC无疑更加高效,安全,维护成本也更低.
最近在看FleaPHP框架,在它的MVC模式中,RBAC系统的执行是通过用户信息管理器、角色信息管理器和访问控制器三个部件来实现的:
用户信息管理器:提供用户信息的存储、查询服务,以及为用户指定角色信息
角色信息管理器:提供角色信息的存储和查询服务
访问控制器:根据角色信息和访问控制表进行验证
其基本使用方法如下:
1.在FleaPHP中使用RNAC需要让应用程序使用 FLEA_Dispatcher_Auth 调度器,而不是默认的 FLEA_Dispatcher_Simple 调度器。
require('FLEA/FLEA.php');
set_app_inf('dispatcher', 'FLEA_Dispatcher_Auth');
* 其他初始化代码
run();
?>
2.准备控制器的 ACT 文件
ACT 文件和控制器文件同名,并且保存在同一个目录下,只是扩展名为 .act.php
。通常使用下面的格式:
return array(
'allow' => 'POWER_USER, SYSTEM_ADMIN',
'actions' => array(
'remove' => array(
'allow' => 'SYSTEM_ADMIN',
),
'create' => array(
'deny' => 'SYSTEM_ADMIN',
),
),
);
?>
ACT 文件只是单纯的返回一个数组。这个数组遵循下面的格式:












3.验证
从SESSION中取出用户的角色信息存入数组中.然后取出然后取出控制器的 ACT进行验证,通过验证的结果就可以决定用户的行为了.其中,用户信息服务和角色信息服务有应用程序的具体应用确定,应用程序在用户建立起session时(比如登陆)指定角色相应角色.