laravel 框架中手写rbac

本文介绍了一个基于PHP的权限验证控制器实现方法,通过分析用户会话数据并递归地检查数据库中存储的权限信息来确定用户是否可以访问特定的控制器方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/6
 * Time: 16:30
 */
namespace App\Http\Controllers;
use Route;
use Symfony\Component\HttpFoundation\Session\Session;
use DB;



class CommonController extends Controller{
    public function __construct()
    {
        $action = \Route::current()->getActionName();
        list($class, $action) = explode('@', $action);
        $controller = substr(strrchr($class,'\\'),1);
        $controller=substr($controller,0,-10);
        
        $session = new Session;
        $u_id = $session->get("u_id");
//        echo $u_id;die;
        $data=DB::table('u_r')
            ->leftJoin('r_p', 'u_r.r_id', '=', 'r_p.r_id')
            ->leftJoin('power', 'power.p_id', '=', 'r_p.p_id')
            ->where('u_id',$u_id)
            ->get();
        $data=json_decode(json_encode($data),true);
        $power=$this->recursion($data);

//     print_r($power);die;
        foreach($power as $k=>$v){
            $arr[]=$v['method'];
        }
        if(!in_array($controller."/".$action,$arr)){
            echo "<script>alert('没有权限,请前去登录!!!!');location.href='demo/laravel/public/'</script>";
//            return redirect("/");
        }


    }
    public function recursion($data,$path=0,$flag=1){
        static $arr=array();
        foreach($data as $key=>$val){
            if($val['p_path']==$path){
                $val['flag']=$flag;
                $arr[]=$val;
                $this->recursion($data,$val['p_id'],$flag+1);
            }
        }
        return $arr;
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值