tp5文章html标签白名单,【TP5.1】用户全权限校验流程(完善【TP5.1】Rbac设计)

author:咔咔

wechat:fangkangfk

1.首先是用户登录校验

92cc96e156c05e07289792b9a9e510f1.png

2.用户登入后

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

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

// 计入用户的权限

SC::setIsSystem(true);

//  计入用户的权限

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

} else {

SC::setIsSystem(false);

}

3b0362e79739f78decaf456e9f5f934f.png

在项目访问的时候

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

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

方法的解释:

1.1checkWhite()

白名单列表

621f7837322916ac881d4d539bbc40a3.png

49bdd9c81f4f33c3e04f99f2a5195a1f.png

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

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

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

95e2bf9cf4319518838dff9ca81d3fb5.png

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

9cc27964ff07b46a15bb7209f381c777.png

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

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

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

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

f90a3f4a219fabea93956ab69728a48f.png

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

e037afd6f0816ae2858ed450e09a82c2.png

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

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

e4c4c7d788b6f704431d59286b8964d8.png

权限验证完成

95889a665747ce2983f65b681204a21c.png

中间件源码:

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了');

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值