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>

    世上无难事,只怕有心人......
  • 相关阅读:
    滤波器组概念
    镜像滤波器
    fdatool 设计IIR滤波器
    虚拟立体环绕声
    浊音经验阈值和条件
    使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置
    投资大师索罗斯的人生轨迹 索氏投资理论 打跨英格兰银行的人 “魔鬼”索罗斯
    互联网究竟带来中心化还是去中心化 那些赚钱的模式 探讨下互联网会把社会改造成什么样子,到底是中心化还是去中心化
    cmd.exe_参数_启动参数 cmd加启动运行参数 命令
    O'Reilly总裁提姆-奥莱理:什么是Web 2.0
  • 原文地址:https://www.cnblogs.com/gooderic/p/5677554.html
Copyright © 2011-2022 走看看