在 `thinkphp6` 中想要使用中间件来做权限校验,避免在基类里做判断再 `exit` 出去这种粗暴的操作。
首先想的是引入中间件,在模块下新建一个 `middleware` 目录,新建一个 `Check.php` 文件,再这里进行校验权限
```php
<?php
namespace app\agent\middleware;
use app\Request;
class Check
{
public function handle(Request $request, $next)
{
if ($request->controller() == "System") {
return $next($request);
}
$token = $request->header('auth');
if (empty($token)) {
return returnJson(20001, "请先登录", ["header" => $request->header()]);
}
//...业务逻辑
return $next($request);
}
}
```
还需要在模块目录下创建一个 `middlewaer.php` 文件,用于绑定中间件的使用
<?php
// 中间件定义文件
return [
app\agent\middleware\Check::class
];
然后使用,发现一个问题 中间件中获取不到controller的名称,打印出来发现都是回空的,查询源码之后发现中间件的优先级高,还没执行到 `setController` 。
文件目录:vendor/topthink/framework/src/think/route/dispatch/Controller.php
函数截图:
咨询群友之后得到控制器中间件可以获取到。那么在不在全局调用,采用基类调用控制前中间件来做就可以实现了。
```
<?php
namespace app\agent\controller;
use app\agent\middleware\Check;
use app\Request;
class Base
{
protected array $middleware = [Check::class];
public function __construct(Request $request)
{
}
}
```
上一篇: php bool值的使用小坑...
下一篇: 创建了QQ频道,欢迎来聊...