layout中动态加载后台管理权限

浏览:415 发布日期:2018/05/21 分类:技术分享 关键字: 权限 动态加载 layout
先声明,本人小白一个!有不对之处,请指正!
可以用框架的RBAC,本篇不是该方法。本篇主要介绍通过动态修改配置,在layout布局模板中,根据不同管理人员,动态加载相应的权限列表。
大体流程:后台登录【根据管理人员权限等级】-》查询权限列表【返回管理权限列表】-》动态写入到配置权限php文件-》跳转时根据权限配置表将数据发送至layout-》显示
登录时关键代码:switch ($rtn["权限字段"])
 {
    case 0:$tmp='(1,2,3,4)';break;    
    case 1:$tmp='(1,2,4)';break;
    case '2':$tmp='()';break;
    default:
        $this->error('请确保您有后台管理权限:(');break;
        }
    $authhead=$model->where('auth_level=0 and auth_path in '.$tmp)->getField('auth_id,auth_name,auth_path,auth_level');
    $listbody=$model->where('auth_level=1')->getField('auth_id,auth_name,auth_func,auth_path,auth_level');
    writeAuth($authhead,$listbody);                
权限文件位于当前分组-》conf目录下:
文件:1、auth.php-权限文件;2、config.php
1、动态写入、读取权限文件
2、config.php return array('LOAD_EXT_CONFIG'=>'auth');
writeAuth写在common 文件 function.php中,代码如下:function writeAuth($arr1,$arr2) {
    $path =MODULE_NAME. '/Conf/auth.php';
    if(!@fileperms($path)==33206){ //读取指定文件权限
          @chmod($path, 0777);    //如果权限不够,修改权限文件权限;
        }
$rtn= file_put_contents($path, "<?php return array(\r\n 'head'=>" .  var_export($arr1,true) . ",\r\n'body'=>".var_export($arr2,true)."\r\n);", LOCK_EX);
    @unlink(RUNTIME_FILE);
    return $rtn;
}
正常情况下是无法写入配置文件,通过 @chmod($path, 0777);修改
亲测可用!
登录权限配置修改后,后台控制器,自定义一个父类控制A,所有后台都继承于A,当然可以在每个控制添加下面代码。不如直接在父控制器写一个~function __constructor(){
        $this->assign('head',C('authhead'));
        $this->assign('body',C('listbody'));
        if (!isset($_SESSION['*****'])) {
            $this->error('对不起,您还没有登录!请先登录再进行浏览', U('***'), 1);
        }}
普通控制 初始化时 parent::__constructor();
在布局模板中将读取的配置权限信息动态显示。<foreach name="head" item="vo">
 <div class="panel panel-primary">
    <div class="panel-heading toggle" >
        <h4 class="panel-title">{$vo.auth_name}</h4>
    </div>
 <div class="panel-body">
    <div class="list-group">
    <foreach name="body" item="vo1">
    <if condition="$vo1['auth_path'] eq $vo['auth_path']">
    <a href="{:U($vo1['auth_func'])}" class="list-group-item">      
            {$vo1.auth_name}</a>
    </if> 
    </foreach>
      </div>
    </div>
</div>
</foreach>
数据库权限表:

ok,如有不清楚的地方可以留言~~
最佳答案
评论( 相关
后面还有条评论,点击查看>>