laravel8中间件实现简单的权限控制

首先要有一个概念,什么是权限控制,一个用户登录的时候,后台会给与不同的角色,每一个角色都有不同的作用,每一个作用就是一个权限。一个用户可以有很多角色(一对多),一个角色可以有很多权限(一对多),同理,一个角色可以有很多用户拥有,一个权限也会有很多角色使用。在日常基本上是一对一或者一堆多的状态,在日常的写作中很少用到多对多,多对多是什么情况呢?

多个用户对应的多个权限,可以理解为多个一对多组合起来互相关联的状态。

现在详细的解释一下在中间件中对用户的权限进行控制

1:首先用户登录时获取瀛湖的角色id,通过角色id 获取用户的权限id(通过角色与权限关联表获取)

 当我们获取到用户权限后,存进缓存中。此时,会有两个方法进行控制,一种比较简单,直接再控制器中读取已有的权限,这样首页就只展示用户已经有的权限,其余的不展示。

可查看具体方法:https://blog.csdn.net/NobleCharacter/article/details/125491479?spm=1001.2014.3001.5502

另外一种比较麻烦,在首页展示所有的路由页面,在中间件中进行鉴定,当走的路由不是已有的权限路由时会返回无权限。

首先在中间件中读取缓存中的权限信息

获取当前要走的路由 

  $route = $request->path();

另外:每个网页都有一些公共的页面需要使用,比如首页,欢迎页等,单独写入到config下的自建文件中,在里面写入公共页面的路由

 再中间件读取

 因为缓存中读取的数据是二维数组,循环获取每一个数组中的路由名,然后和公共的进行拼接,

然后循环外判断要走的路由是否在已有权限的路由内,如果不在则返回无权限。

//        读取缓存中的权限页面路由
        $auths = Cache::get('auths');
//        获取要走的页面路由
        $route = $request->path();
        $res = config("rbac.allow_route");
        if ($auths !== true) {
            foreach ($auths as $v) {
//                判断路由名是否为空,最顶端页面无路由名。
                if ($v['route_name']!=''){
//                    把获取的路由名追加到之前公共的页面路由中
                    array_push($res,'admin/'.$v['route_name']);
                }
            }
//            在循环中判断是否有权限
            if (!in_array($route, $res)) {
                exit('无权限');
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值