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>

    世上无难事,只怕有心人......
  • 相关阅读:
    CSDNReader(android客户端)发布!!
    linux下的C语言快速学习—从1+1开始。
    linux下的C语言快速学习—进程和文件
    ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
    CSDN阅读器(android版)开发总结
    算法实现将一个输入的数字颠倒(输入12345>54321)
    linux下的C语言快速学习—计算机体系结构基础简单了解
    实现一个字符串查找子串的函数
    .net4.0面向对象学习笔记—数据类型
    装饰器模式
  • 原文地址:https://www.cnblogs.com/gooderic/p/5677554.html
Copyright © 2011-2022 走看看