* This source file is subject to the license under the project that is bundled. */ namespace App\Middleware; # 生成才能被自动注册 # composer dumpautoload 执行加载 不行在执行 # 生成中间件 php ./bin/hyperf.php gen:middleware Auth/FooMiddleware 【Auth = 文件夹名称-可以不带 默默人会生成在 app下的Middleware # 文件夹中,若没有自动创建 /FooMiddleware = 中间价名称】 use App\Constants\AppErr; use App\Exception\BusinessException; use App\Kernel\Casbin\Casbin; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; use Hyperf\Config\Annotation\Value; class PermissionMiddleware implements MiddlewareInterface { /** * @var ContainerInterface */ protected $container; /** * @var Casbin */ private $casbin; private $exclude = [ '/api/auth/login', '/api/user', '/api/user/logout', '/api/user/menus', '/api/user/profile', '/api/user/password', '/api/user/avatar', ]; public function __construct(ContainerInterface $container) { $this->container = $container; $this->casbin = $container->get(Casbin::class); } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $path = $request->getUri()->getPath(); if (in_array($path, $this->exclude)) { return $handler->handle($request); } $user = user(); if (! $this->casbin->enforce($user->username, $path, $request->getMethod())) { logger('casbin-permission')->info( AppErr::info(AppErr::PERMISSION_DENIED), [ 'user' => $user, 'path' => $path, 'method' => $request->getMethod(), ] ); throw new BusinessException(null, AppErr::PERMISSION_DENIED); } return $handler->handle($request); } }