【TP5.1】用户全权限校验流程(完善【TP5.1】Rbac设计)

author:咔咔

wechat:fangkangfk

 

1.首先是用户登录校验

2.用户登入后

首先通过这部分判断登入用户,如果是系统管理员记录用户权限

     if ($user->is_system == 1) { 

             // 计入用户的权限

              SC::setIsSystem(true);

             //  计入用户的权限

              SC::setUserRole(Rbac::getRoleModule($user->role_id));

          } else {

              SC::setIsSystem(false);

          }

在项目访问的时候

因为中间件配置的是全局的,所以必然会进到AuthMiddleware这个中间件

在这里我们里边有个test的单元测试模块这里需要规避一下

方法的解释:

  1.1checkWhite()

白名单列表

  1.2onlyCheck() 方法用来校验唯一登陆的(不懂得去看,这块就不解释了) 

  1.3通过 OnlyLogin::onlyCheck() 进行用户只允许在一个地方登入校验判断,然后再通过 Rbac类中的check方法 做权限校验

 

做验证之前,首先通过初始化的构造函数对于用户请求url进行初始化操作,同时定义好需要校验的权限模块authModule

然后在获取系统角色权限列表(放置到用户登录成功后存入用户的角色参数中)

具体校验方法就是check()方法 

$this->module 是用户访问当前的模块

$this->authModule 是自己规定需要校验的模块

判断用户访问的模块是否需要权限的校验 如果不在规定模块里面那么就允许访问

checkModule()具体的验证用户权限方法 

这里有一个SC::getUserRole()方法

这个方法是用来获取用户权限列表的,是在登录成功后存入的

 

 

权限验证完成

 

 

中间件源码:

<?php

namespace app\http;

use SC,OnlyLogin,Rbac,Log;

class AuthMiddleware
{
    public function handle($request, \Closure $next)
    {
        //规避单元测试模块的正常访问
        if(request()->module() == 'test'){
            return $next($request);
        }
        /**
         * 使用中间件进行白名单判断,判断用户是否权限需要校验
         * Rbac::checkWhite()返回的是boolean
         * true不需要校验直接返回请求
         */
        if(Rbac::checkWhite()){
            return $next($request);
        }

        /**
         * 检测用户是否是唯一登录
         */
         if (OnlyLogin::onlyCheck()) {
             Log::write('唯一登录进入了');
             /**
              * 检测用户是否有权限
              */
             if(Rbac::check()){
                 Log::write('权限不需要校验');
                 return $next($request);
             }else{
                 return redirect($request->module().'/login/login');
             }
         }else{
             return redirect('你被T了');
         }
    }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔咔-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值