85 lines
2.2 KiB
PHP
Executable File
85 lines
2.2 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* This file is part of the youyao/admin-api.
|
|
*
|
|
* (c) youyao <info@nuancebiotech.cn>
|
|
* 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);
|
|
}
|
|
}
|