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

    /**
    * 检查当前管理员是否有权限访问这个页面
    */
    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>

    世上无难事,只怕有心人......
  • 相关阅读:
    js如何查看元素类型
    selenium之多线程启动grid分布式测试框架封装(四)
    selenium之多线程启动grid分布式测试框架封装(三)
    selenium之多线程启动grid分布式测试框架封装(二)
    selenium之多线程启动grid分布式测试框架封装(一)
    jmeter之自定义java请求性能测试
    jmeter之GUI运行原理
    mongodb操作之使用javaScript实现多表关联查询
    mongodb操作:利用javaScript封装db.collection.find()后可调用函数源码解读
    loadrunner必用函数web_reg_save_param获取多个符合边界值条件的使用方法
  • 原文地址:https://www.cnblogs.com/gooderic/p/5677554.html
Copyright © 2011-2022 走看看