基于onethink的ocenter 权限管理进行授权时节点丢失是怎么回事情

2015-05-10 21:35:00
hainuo
原创 2887
摘要:在二次开发过程中对授权体系更改时,出现节点丢失如何处理?
![blob.png](/ueditor/php/upload/image/20150510/1431265103105165.png "1431265103105165.png")在基于ocenter开发时遇到一件怪事情,如图所示经过仔细排查发现原因如下1、在授权时,首先是从menu表获取节点数据时  admincontroller 第398行和413行 左右(由于对源代码做了变动可能位置不同,但是可以对照代码)```foreach ($list as $key => $value) {    if (stripos($value['url'], MODULE_NAME !== 0) {        $list[$key]['url'] = MODULE_NAME . '/' . $value['url'];    }}```可以看到这里对URL进行了增强,每个URL都检查了是否存在模块名,从而保证路由模式与ThinkPHP预规定`module/controller/method` 方式相同2、在updaterule方法 即 更新auth_rules表时,却是直接赋值AuthManagerController 第39至44行左右```        foreach ($nodes as $value) {            $temp['name'] = $value['url'];            $temp['title'] = $value['title'];            $temp['module'] = getModule('name',$value['module_id']);            if ($value['pid'] > 0) {```3、对照两处的做法结合模板中使用的是access.html 第67 68行左右``` "/>{$op.title}```$auth_rules 是以rule表name为键名 id为键值的数组   name就是menu中的url地址  所以可以看到再者两处结合时就出了问题   即当前的input.auth_rules值不存在的4、模板中js脚本操作access.html第100行左右```        $('.auth_rules').each(function(){            if( $.inArray( parseInt(this.value,10),rules )>-1 ){                $(this).prop('checked',true);            }            alert(this.value);            if(this.value==''){                $(this).closest('span').remove();            }        });```于是当this.value==''时,所在的节点 被移除了,解决办法很简单在updaterules时,增加上module即可
发表评论
陆 加 柒 =
评论通过审核后显示。