common 权限管理(访问权限)

思路: 

在一个构造函数中   public function __construct(){}

1:获取用户id

2:根据用户id找角色   (角色表和用户角色表联查找用户拥有的所有角色的id)

3:拼接角色id

4:根据角色找权限 (权限表和角色权限表联查 查找到用户拥有角色的权限)

5:循环拼接控制器和方法  

6:获取当前的控制器方法 (request()->controller().'/'.request()->action())

7:判断是否存在  (不存在  false “该用户没有此访问的权限”)   

这段代码是判断是否有访问控制器的权限

<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use think\Session;
use think\Cookie;
use think\Request;
class Common extends Controller
{
    public function __construct()
    {
        parent::__construct();
        $session = Session::get("admin");
        if(empty($session)||!isset($session))
        {
            $this->error('没有登录',"admin/login/login");
        }
            //获取用户id
            $id=$session['username']['uid'];
            //根据用户id查出用户对应的角色id
            $res=Db::table('u_r')->field('r_id')->where('u_id',"$id")->select();
            //通过循环,将查询出来的角色id拼成字符串 例如1,2,3
            $r_id='';
            foreach($res as $v)
            {
                $r_id.=','.$v['r_id'];
            }
            //将用户对应的角色拼接成数组的形式
            $r_id=substr($r_id,1);
            //通过角色id查找角色权限关系表  查出权限
            $data=Db::table('node')->join('r_n','nodeId=n_id')->whereIn('r_id',"$r_id")->select();
            //拼接权限
            $power=[];
            foreach($data as $v)
            {
                if(!in_array($v['controller'],$power))//判断控制器是否存在
                {
                    $power[]=$v['controller'];
                }
            }


        $con=request()->controller();//当前访问的控制器
            //request()->action  当前访问的方法

        if(!in_array($con,$power) && $con!=='Index')
        {
            $this->error('该用户没有访问权限');
        }

    }
}

图片中的代码是判断是否有访问控制器/方法的权限

猜你喜欢

转载自blog.csdn.net/baiyawen1/article/details/81028302