【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)创建数据表: CREATE TABLE IF NOT EXISTS `think_form` ...
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的...
(1)创建模版:/App/Home/View/Form/edit.html   <FORM m...
自定义配置文件user.php: <?php return array(    \'se...
在一些成熟的CMS系统中,后台一般都包含一个配置中心(如织梦...
废话不多说先上图预览下,即本博客的分页; 这个分页类是在...