• 检查当前管理员是否有权限访问这个页面,后台只显示当前管理员有权限访问的按钮


    /**
    * 检查当前管理员是否有权限访问这个页面
    */
    public function chkPri()
    {
    // 获取当前管理员正要访问的模型名称、控制器名称、方法名称
    // tP中正带三个常量
    //MODULE_NAME , CONTROLLER_NAME , ACTION_NAME
    $adminId = session('id');
    // 如果是超级管理员直接返回 TRUE
    if($adminId == 1)
    return TRUE;
    $arModel = D('admin_role');
    $has = $arModel->alias('a')
    ->join('LEFT JOIN __ROLE_PRI__ b ON a.role_id=b.role_id
    LEFT JOIN __PRIVILEGE__ c ON b.pri_id=c.id')
    ->where(array(
    'a.admin_id' => array('eq', $adminId),
    'c.module_name' => array('eq', MODULE_NAME),
    'c.controller_name' => array('eq', CONTROLLER_NAME),
    'c.action_name' => array('eq', ACTION_NAME),
    ))->count();
    return ($has > 0);
    }

    在访问任何一个方法之前调用这个方法判断是否有权限访问这个页面

    在公共方法显示

    <?php
    namespace AdminController;
    use ThinkController;
    class BaseController extends Controller
    {
    public function __construct()
    {
    //必须先调用父类的构造函数
    parent::__construct();
    //判断登录
    if(!session('id'))
    $this->error('必须先登录!',U('Login/login'));

    //所有管理员都可以进入后台的首页
    if(CONTROLLER_NAME == 'Index')
    return true;
    $priModel=D('privilege');
    if(!$priModel->chkPri())
    $this->error('无权访问!');

    }
    }

    /**
    * 获取当前管理员所拥有的前两级的权限
    *
    */
    public function getBtns()
    {
    /*************** 先取出当前管理员所拥有的所有的权限 ****************/
    $adminId = session('id');
    if($adminId == 1)
    {
    $priModel = D('Privilege');
    $priData = $priModel->select();
    }
    else
    {
    // 取出当前管理员所在角色 所拥有的权限
    $arModel = D('admin_role');
    $priData = $arModel->alias('a')
    ->field('DISTINCT c.id,c.pri_name,c.module_name,c.controller_name,c.action_name,c.parent_id')
    ->join('LEFT JOIN __ROLE_PRI__ b ON a.role_id=b.role_id
    LEFT JOIN __PRIVILEGE__ c ON b.pri_id=c.id')
    ->where(array(
    'a.admin_id' => array('eq', $adminId),
    ))->select();
    }
    /*************** 从所有的权限中挑出前两级的 **********************/
    $btns = array(); // 前两级权限
    foreach ($priData as $k => $v)
    {
    if($v['parent_id'] == 0)
    {
    // 再找这个顶的子级
    foreach ($priData as $k1 => $v1)
    {
    if($v1['parent_id'] == $v['id'])
    {
    $v['children'][] = $v1;
    }
    }
    $btns[] = $v;
    }
    }
    return $btns;
    }

    <div id="menu-list">
    <ul id="menu-ul">
    <?php
    $priModel = D('privilege');
    $btns = $priModel->getBtns();
    foreach ($btns as $k => $v): ?>
    <li class="explode" key="02_cat_and_goods" name="menu">
    <?php echo $v['pri_name']; ?>
    <ul>
    <?php foreach ($v['children'] as $k1 => $v1): ?>
    <li class="menu-item"><a href="<?php echo U($v1['module_name'].'/'.$v1['controller_name'].'/'.$v1['action_name']); ?>" target="main-frame"><?php echo $v1['pri_name']; ?></a></li>
    <?php endforeach; ?>
    </ul>
    </li>
    <?php endforeach; ?>
    </ul>
    </div>

    世上无难事,只怕有心人......
  • 相关阅读:
    http请求user_agent字段解析
    搭建docker registry私有镜像仓库
    k8s遇见的问题
    nginx相关知识
    iOS学习笔记(8)——GCD初探
    iOS学习笔记(7)——解析json中的中文
    SAE实践——创建简单留言板
    SAE实践——创建新应用开启MySQL服务
    SAE实践——用SVN命令行同步/提交代码
    PHP错误——Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
  • 原文地址:https://www.cnblogs.com/gooderic/p/5677554.html
Copyright © 2020-2023  润新知