分组模式下使用RBAC的经验
时间:2011-05-04
来源:互联网
根据官方出的thinkphp2.1 RBAC示例和使用说明,依葫芦画瓢,尝试在分组模式下使用RBAC,代码基本照抄,并按自己的需要在数据库中的填写好了数据,可是用户登录后,怎么也不能访问已经分配了权限的模块和方法(操作),trace信息只是提示RBAC.class.php执行过程中遇到了未定义的方法,用NetBeans加上xdebug进行跟踪调试,发现没有的获得模块的名称。
记得论坛中有朋友说:阅读源代码是最好的学习途径。于是打开RBAC.class.php文档,阅读到第168行,看到AccessDecision方法,
恍然大悟,该方法有一个可选的参数,默认值是常量APP_NAME,而分组模式下则用常量GROUP_NAME获得当前分组名称。这个细节在官方的RBAC使用说明中没有提到。
查到了原因,问题就很容易解决了。在初始化权限验证的方法中,在调用AccessDecision时都加上GROUP_NAME参数。
附上初始化权限验证的代码,方便和官方示例中的代码对照:
- //所有权限验证的模块都需要继承这个类
- class BaseAction extends Action {
- function _initialize() {
- dump($_SESSION);
- header("Content-Type:text/html; charset=utf-8");
- if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {
- //调用thinkphp自带的RBAC类
- import('ORG.Util.RBAC');
- //通过RBAC类中的AccessDecision获取与权限相关的信息,如果没有获取到则执行以下部份
- if (!RBAC::AccessDecision(GROUP_NAME)) {
- //获取SESSION中的用户标识号,如果没有则用户没有登陆跳转到login页面
- if (!$_SESSION[C('USER_AUTH_KEY')]) {
- $this->assign('jumpUrl', __APP__ . C('USER_AUTH_GATEWAY'));
- $this->error('没有登录!请重新登录');
- // redirect(PHP_FILE . C('USER_AUTH_GATEWAY'));
- }
- if (C('RBAC_ERROR_PAGE')) {
- // 定义权限错误页面
- //redirect(PHP_FILE . C('RBAC_ERROR_PAGE'));
- $this->assign('jumpUrl', __APP__ . C('RBAC_ERROR_PAGE'));
- $this->error('对不起,没有权限');
- //redirect(C('RBAC_ERROR_PAGE'));
- } else {
- //检测是否开始了游客认证方式
- if (C('GUEST_AUTH_ON')) {
- $this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));
- }
- // 提示错误信息
- $this->error(L('_VALID_ACCESS_'));
- }
- }
- }
- }
- }
作者: w_jm 发布时间: 2011-05-04
现在的RBAC真是比较弱,求强化。
作者: vus520 发布时间: 2011-05-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28