权限访问控制功能

原创 2018-11-19 15:00:06 242
摘要:<?phpnamespace app\admin\controller;use app\admin\model\Menu;use think\facade\Session;use app\admin\model\AdminGroups;use app\admin\model\Admin;use think\facade\Request;//公共的验证session类 其他类文件继承class
<?php
namespace app\admin\controller;
use app\admin\model\Menu;
use think\facade\Session;
use app\admin\model\AdminGroups;
use app\admin\model\Admin;
use think\facade\Request;

//公共的验证session类 其他类文件继承
class Common extends \think\Controller
{
   //验证session
   public function __construct()
   {
       parent::__construct();

       if(!Session::has('admin')){
           $this->error('没有登陆',url('Login/index'));
           exit;
       }

       //验证权限 根据admin表gid到admin_groups表找权限
       $admin = Admin::where('id',Session::get('admin.id'))->find();
       $group = AdminGroups::where('gid',$admin['gid'])->find();
       if(!$group){
           $this->requestError('无权访问');
       }

       //获取当前用户权限
       $rights = json_decode($group['rights']);

       //获取当前用户访问的控制器 方法名
       $controller = Request::controller();
       $action = Request::action();

       $res = Menu::where('controller',$controller)->where('method',$action)->find();
       //访问的控制器方法是否存在
       if(!$res){
           $this->requestError('控制器方法不存在');
       }

       //访问的控制器方法是否禁用
       if($res['status']==1){
           $this->requestError('控制器方法禁用');
       }

       //判断当前用户是否有权访问当前控制器方法
       if(!in_array($res['mid'],$rights)){
           $this->requestError('没有权限访问控制器方法');
       }

   }
   //输出错误信息方法
   private function requestError($msg){
       //判断是否是ajax请求 不是直接返回错误信息
       if(Request::isAjax()){
           return ['status'=>1,'msg'=>$msg];

       }else{
           exit($msg);
       }

   }
}


批改老师:查无此人批改时间:2018-11-19 15:24:35
老师总结:代码好像没复制全,代码的意思是对的。继续加油。

发布手记

热门词条