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 文件只是单纯的返回一个数组。这个数组遵循下面的格式:
' allow ' => ' 允许访问该控制器的角色名 ' ,
' deny ' => ' 禁止访问该控制器的角色名 ' ,
' actions ' => array (
' 动作名 ' => array (
' allow ' => ' 允许访问该动作的角色名 ' ,
' deny ' => ' 禁止访问该动作的角色名 ' ,
) ,
// .... 更多动作
) ,
);
3.验证
从SESSION中取出用户的角色信息存入数组中.然后取出然后取出控制器的 ACT进行验证,通过验证的结果就可以决定用户的行为了.其中,用户信息服务和角色信息服务有应用程序的具体应用确定,应用程序在用户建立起session时(比如登陆)指定角色相应角色.