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

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

 

转载于:https://www.cnblogs.com/gooderic/p/5677554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值