搜索
系统检测到您的用户名不符合规范:

ThinkPHP框架3.1.3 BUG(麻烦修复)

浏览:1076 发布日期:2013年07月22日 分类:站务建议 关键字: ThinkPHP框架3.1.3 BUG
小弟是框架的初学者,在看后盾网黄老师的PHP实战教程的时候,发现了一个3.1.3最新框架中的一个缺陷。
'SESSION_TYPE' => 'Db',
'SESSION_PREFIX' => 'sess_my' //SESSION表前缀
当我们自定义了 session 的表前缀后,
完整包里面RABC类的这个方法:
static function saveAccessList($authId=null) {
if(null===$authId) $authId = $_SESSION[C('USER_AUTH_KEY')];
// 如果使用普通权限模式,保存当前用户的访问权限列表
// 对管理员开发所有权限
if(C('USER_AUTH_TYPE') !=2 && !$_SESSION[C('ADMIN_AUTH_KEY')] )
$_SESSION['_ACCESS_LIST'] = RBAC::getAccessList($authId);
return ;
}

其中 判断超级管理员 的session读取用了PHP原本的方法,这样不行,如果我们自定义了 session数据前缀,那么就会多出一层,数组是嵌套的
Array
(
[sess_my] => Array
(
//用户数据
)

[_ACCESS_LIST] => Array
(
//权限数据
)
)
这样用 $_SESSION[C('USER_AUTH_KEY')] 就无法读取得到
需要修改成 session(C('USER_AUTH_KEY'))
下面读取超级管理员身份的原理一样,不然就无法通过了!
最后导致的结果就是:无法正确读取当前登录用户的权限,并且写入到session中

刚才我又看了一下,还有 AccessDecision 这个静态方法中,判断管理的那段代码:if(empty($_SESSION[C('ADMIN_AUTH_KEY')]))
判断 这个session是空,就不是管理员,也需要修改成if(!session(C('ADMIN_AUTH_KEY')))

$accessList = RBAC::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
这句代码 应该修改成:
$accessList = RBAC::getAccessList(session(C('USER_AUTH_KEY')));

小弟菜鸟,才接触,如有错误,请指正!
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
1878290041
积分:30 等级:LV0
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /