摘要://base.php<?php namespace app\admin\controller; use think\facade\Session; use app\admin\model\RoleModel; use app\admin\model\MenuModel; use think\Controller; class Base extends Controller{ public
//base.php
<?php namespace app\admin\controller;
use think\facade\Session;
use app\admin\model\RoleModel;
use app\admin\model\MenuModel;
use think\Controller;
class Base extends Controller{
public function __construct(){ parent::__construct(); if(!Session::has('user')){ $this->error('您還未登錄,請(qǐng)登錄...','Account/login'); } $this->user = Session::get('user'); //dump($this->user); $group = RoleModel::where('gid',$this->user['gid'])->find(); if(!$group){ $this->request_error('對(duì)不起,您沒(méi)有訪(fǎng)問(wèn)權(quán)限!'); }
$rights = json_decode($group['rights'],true);
$controller = request()->controller();
$action = request()->action();
$res = MenuModel::where(['controller'=>$controller,'method'=>$action])->find();
if(!$res){ $this->request_error('對(duì)不起,您沒(méi)有此功能權(quán)限!'); } if($res['status']!=0){ $this->request_error('對(duì)不起,此功能被禁用!'); } if(!in_array($res['mid'],$rights)){ $this->request_error('對(duì)不起,您沒(méi)有此權(quán)限'); } }
private function request_error($msg){ if(request()->isAjax()){ exit(json_encode(['code'=>1,'msg'=>$msg])); } exit($msg); } }
//index.php
<?php namespace app\admin\controller;
use think\facade\Session;
use app\admin\model\RoleModel;
use app\admin\model\MenuModel;
class Index extends Base{
public function index(){ //獲取登錄用戶(hù)Session信息 $user= Session::get('user'); //獲取登錄用戶(hù)角色權(quán)限 $pow = RoleModel::where('gid',$this->user['gid'])->find(); //json轉(zhuǎn)換為數(shù)組 $rights = json_decode($pow['rights'],true); //構(gòu)造當(dāng)前用戶(hù)菜單權(quán)限where條件 $where = 'mid in('.implode(',',$rights).') and status=0 and ishidden=0'; //獲取當(dāng)前用戶(hù)權(quán)根的所有菜單 $res = MenuModel::where($where)->select(); //聲明mid索引空數(shù)組 $index = []; //獲取以mid索引數(shù)組 foreach ($res as $val) { $index[$val['mid']] = json_decode($val,true); } //獲取以mid索引數(shù)組菜單層級(jí)關(guān)系 $menu = $this->gettreeitems($index);
//dump($menu); //渲染菜單 $this->view->menu = $menu; //渲染用戶(hù)的title字段 $user['iden'] = $pow['title'];
$this->view->user = $user;
return $this->view->fetch();
}
public function welcome(){
return $this->view->fetch(); } //菜單層級(jí)關(guān)系函數(shù) private function gettreeitems($items){ //聲明返回的數(shù)組 $tree = []; //遍歷索引數(shù)組 foreach ($items as $val) { //如果父PID沒(méi)有值就把$tree數(shù)組定位到$item指針上,有值就增加關(guān)聯(lián)sub字菜單并定位到當(dāng)前數(shù)組指針上 if(isset($items[$val['pid']])){ $items[$val['pid']]['sub'][] = &$items[$val['mid']]; }else{ $tree[] = &$items[$val['mid']]; } } //獲得層級(jí)新數(shù)組 return $tree; } }
//渲染的index.php
<!DOCTYPE html>
<html>
<head>
<title>后臺(tái)管理系統(tǒng)</title>
<link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">
<script type="text/javascript" src="/static/layui/layui.js"></script>
<style type="text/css">
body{margin:0;padding:0;}
.header{width:100%;height:50px;background:#0094ff;color:#ffffff;line-height: 50px;}
.title{margin-left:20px;font-size:20px;}
.userinfo{float:right;margin-right:20px;}
.userinfo a{text-decoration:none;color:#ffffff;}
.menu{position:absolute;width:200px;background:#23262E; }
.layui-nav{border-radius:0px!important;}
.layui-nav-tree{border:none;} .layui-nav-item{border:none;}
.main{position:absolute;left:200px;top:50px;right:0px;}
</style>
</head>
<body>
<!-- header -->
<div class="header">
<span class="title">后臺(tái)管理系統(tǒng)</span>
<span class="userinfo">
{$user.username}【{$user.iden}】<a href="javascript:;" onclick="logout()">退出</a>
</span>
</div>
<div class="menu" id="menu">
<ul class="layui-nav layui-nav-tree">
{volist name="$menu" id="vo"}
<li class="layui-nav-item"> <a href="javascript:;">{$vo.title}</a>
<?php if(isset($vo['sub']) && $vo['sub']) :?>
{volist name='$vo.sub' id='cvo'}
<dl class="layui-nav-child">
<dd><a href="javascript:;" onclick="srcpage(this)" src="{:url($cvo.controller.'/'.$cvo.method)}">{$cvo.title}</a>
</dd>
</dl>
{/volist}
<?php endif?>
</li>
{/volist}
</ul>
</div>
<div class="main">
iframe src="{:url('welcome')}" style="width:100%;height:100%" frameborder="0" scrolling="0"></iframe>
</div>
</body>
<script> layui.use(['element','layer'],function(){ var element = layui.element; $ = layui.jquery; layer = layui.layer; resetMenuHeight(); })
function logout(){ layer.confirm('確定退出嗎?', { icon:2, btn:['確定','退出'] }, function(){ $.get('{:url(\'Account/logout\')}',function(res){ if(res['code']==0){ layer.msg(res['msg']); setTimeout(function(){window.location.href="{:url('Account/login')}",1000}); } },'json') }
) }
function srcpage(obj){ var src = $(obj).attr('src'); $('iframe').attr('src',src); }
function resetMenuHeight(){ var height = document.documentElement.clientHeight - 50; $('#menu').height(height); $('.main').height(height-3); }
</script>
</html>
批改老師:查無(wú)此人批改時(shí)間:2020-02-27 15:32:23
老師總結(jié):完成的不錯(cuò),后臺(tái)cms管理系統(tǒng),最重要的就是權(quán)限。繼續(xù)加油。