判断用户的操作权限,我们可能需要获取当前url路径中的应用名、控制器名、操作名。
如果使用了多应用模式,可以通过下面的方法来获取当前应用
app('http')->getName();
获取当前控制器
Request::controller();
获取当前操作
Request::action();
在中间件middleware中是无法获取控制器和操作的
需要将middleware的引入修改为 config 目录下的 route.php 中
<?php
return [
'middleware' => [
// 系统日志记录
// \app\run\middleware\SystemLog::class,
// 检测登录状态
\app\middleware\AuthMiddleware::class,
],
];
middleware中获取应用名、控制器名、操作名
<?php
namespace app\middleware;
use think\facade\Request;
use think\facade\Session;
// 前置行为的中间件
class AuthMiddleware
{
public function handle($request, \Closure $next)
{
// 添加中间件执行代码 start
// 获取当前应用名
$app = app('http')->getName();
// 获取当前控制器名
$controller = Request::controller('true');
// 获取当前操作名
$action = Request::action('true');
// echo $app;
// echo "4444<br/>";
// echo $controller;
// echo "4444<br/>";
// echo $action;
// echo "4444<br/>";
if (!$app || !$controller || !$action)
{
echo "未能获取到app,controller,action";
exit();
}
// 校验权限的代码
// 添加中间件执行代码 end
return $next($request);
}
}
软件工程小施同学
20231013