常用的无限极分类递归和后台管理权限判断

 普通的数据递归

public static function getTree($data,$pid=0)
    {
        $node = [];

        foreach ($data as $v){

            if($v['pid']==$pid){//父级id

                $v['child'] = self::getTree($data,$v['id']);

                $node[] = $v;
            }
        }

        return $node;
    }

数据前端加特殊符号的递归

 public static function getTree($data,$pid=0,$level=0)
    {

        $html = '--';

        static $arr = [];

        foreach ($data as $item){

            if($item['pid']==$pid){

                $item['html'] = str_repeat($html,$level*2);

                $item['level'] = $level+1;

                $arr[] = $item;

                $this->getTree($data,$item['id'],$item['level']);

            }
        }

        return $arr;

    }

laravel中间件权限判断 larave8为例

public function handle(Request $request, Closure $next)
    {
        if(!auth()->check()){
          return redirect(route('admin.login'));
        }

        $route = session('admin.route');//从缓存里取出权限
        $routes = array_merge($route,config('rbac.allow'));//把其他要用到的路由提前写在配置文件里
        $routeUrl = $request->route()->getName();//获取当前路由名
//        echo '<pre>';
//        print_r($routes);
//        print_r($routeUrl);
//        die;
        if(!in_array($routeUrl,$routes)){
            //exit('暂无权限');
            return redirect(route('admin.404'));
        }

        return $next($request);
    }

tp的权限判断 tp5为例 可以写在Base控制器的构造方法里

 
  //权限数组
  private $in_node = ['index/index'];

//判断是否登录
        $token = input('token');
        if (empty($token)) {
            $this->error('缺少token参数', '/login');
        }
        //验证失败返回0  成功返回uid
        $res = Token::verifyToken($token);
        if (!$res) {
            $this->error('token令牌失效', '/login');
        }

        //验证权限
        //1. 取出权限
        $userNode = Session::get('node'); //session
        //$userNode = \app\admin\model\Admin::getUserNode($res); // postman  如果postman请求则重新查询用户权限  $res => uid
        //2. 权限控制器,权限方法 拼接成地址 如: admin/index
        foreach ($userNode as $item) {
            foreach ($item['child'] as $value) {
                //3. 将拼接好的地址放入数组内
                $this->in_node[] =  strtolower($value['node_controller']) .'/'. strtolower($value['node_action']);
            }
        }
        //4. 获取当前地址栏地址  admin/recycle
        $controller = \request()->controller(); //控制器
        $action= \request()->action(); //方法
        $path = strtolower($controller) .'/'. strtolower($action);

        //5. 判断地址是否在数组内  -- 判断学生是否在班级内
        //echo "<pre>";
        //print_r($path);
        //print_r($this->in_node);die;

        if(!in_array($path,$this->in_node)){
           // in_array  判断元素是否在数组内 在返回true 不在返回false
            $this->error('无权限,请联系管理员!', '/login');
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值