diff --git a/app/admin/controller/mall/Goods.php b/app/admin/controller/mall/Goods.php index 3422c37..078f75d 100644 --- a/app/admin/controller/mall/Goods.php +++ b/app/admin/controller/mall/Goods.php @@ -4,6 +4,7 @@ namespace app\admin\controller\mall; use app\admin\model\MallCate; use app\admin\model\MallGoods; +use app\admin\service\annotation\MiddlewareAnnotation; use app\common\controller\AdminController; use app\admin\service\annotation\ControllerAnnotation; use app\admin\service\annotation\NodeAnnotation; @@ -66,4 +67,9 @@ class Goods extends AdminController return $this->fetch(); } + #[MiddlewareAnnotation(ignore: MiddlewareAnnotation::IGNORE_LOGIN)] + public function no_check_login(Request $request): string + { + return '这里演示方法不需要经过登录验证'; + } } \ No newline at end of file diff --git a/app/admin/middleware/CheckLogin.php b/app/admin/middleware/CheckLogin.php index 4d54a71..e3348b2 100644 --- a/app/admin/middleware/CheckLogin.php +++ b/app/admin/middleware/CheckLogin.php @@ -7,6 +7,7 @@ use app\Request; use Closure; use ReflectionClass; use ReflectionException; +use app\admin\service\annotation\MiddlewareAnnotation; class CheckLogin { @@ -31,6 +32,13 @@ class CheckLogin if (in_array($action, $noNeedCheck)) { return $next($request); } + $reflectionMethod = new \ReflectionMethod($controllerClass, $action); + $attributes = $reflectionMethod->getAttributes(MiddlewareAnnotation::class); + foreach ($attributes as $attribute) { + $annotation = $attribute->newInstance(); + $_ignore = (array)$annotation->ignore; + if (in_array('LOGIN', (array)$_ignore)) return $next($request); + } if (empty($adminUserInfo)) { return redirect(__url('login/index')); } diff --git a/app/admin/service/annotation/MiddlewareAnnotation.php b/app/admin/service/annotation/MiddlewareAnnotation.php index 85e637e..fcdc59e 100644 --- a/app/admin/service/annotation/MiddlewareAnnotation.php +++ b/app/admin/service/annotation/MiddlewareAnnotation.php @@ -10,6 +10,9 @@ final class MiddlewareAnnotation /** 过滤日志 */ const IGNORE_LOG = 'LOG'; + /** 免登录 */ + const IGNORE_LOGIN = 'LOGIN'; + public function __construct(public string $type = '', public string|array $ignore = '') { }