So verwenden Sie das Hyperf-Framework für die Berechtigungsauthentifizierung
Einführung:
In einer Webanwendung ist die Berechtigungsauthentifizierung eine sehr wichtige Funktion. Durch die Berechtigungsauthentifizierung können wir bestimmte Benutzer auf den Zugriff auf bestimmte Ressourcen und Funktionen beschränken und sensible Daten vor dem Zugriff durch nicht autorisierte Benutzer schützen. In diesem Artikel wird die Verwendung des Hyperf-Frameworks zur Berechtigungsauthentifizierung vorgestellt und spezifische Codebeispiele gegeben.
1. Konfigurieren Sie die Berechtigungstabelle und die Rollentabelle.
Bevor wir das Hyperf-Framework für die Berechtigungsauthentifizierung verwenden, müssen wir zunächst die Berechtigungstabelle und die Rollentabelle konfigurieren. Öffnen Sie die .env-Datei im Projekt und fügen Sie die folgende Konfiguration hinzu:
# 权限表 PERMISSION_TABLE=admin_permissions # 角色表 ROLE_TABLE=admin_roles
Erstellen Sie dann die entsprechende Tabelle in der Datenbank.
2. Berechtigungs-Middleware definieren
Das Hyperf-Framework bietet einen Middleware-Mechanismus, der einige Vorgänge vor und nach der Anforderungsverarbeitung ausführen kann. Wir können Middleware für die Berechtigungsauthentifizierung verwenden. Erstellen Sie zunächst eine neue Datei AuthMiddleware.php im Verzeichnis app/Middleware mit dem folgenden Code:
<?php declare(strict_types=1); namespace AppMiddleware; use HyperfHttpServerContractRequestInterface; use HyperfHttpServerContractResponseInterface; use HyperfHttpServerRouterDispatched; use PsrContainerContainerInterface; use HyperfLoggerLoggerFactory; use HyperfCircuitBreakerAnnotationCircuitBreaker; class AuthMiddleware { private $container; private $logger; public function __construct(ContainerInterface $container, LoggerFactory $loggerFactory) { $this->container = $container; $this->logger = $loggerFactory->get('auth'); } /** * @param RequestInterface $request * @param ResponseInterface $response * @param callable $next * @return ResponseInterface */ public function process(RequestInterface $request, callable $next): ResponseInterface { // 获取当前请求的控制器和方法 $dispatched = $this->container->get(Dispatched::class); $controller = $dispatched->handler->callback[0]; $action = $dispatched->handler->callback[1]; // 进行权限认证 $isAuth = $this->checkPermission($controller, $action); if (!$isAuth) { // 权限不足,返回错误提示 return $response->json(['code' => 403, 'message' => 'Permission Denied']); } // 继续执行下一个中间件 return $next($request); } /** * @param $controller * @param $action * @return bool */ protected function checkPermission($controller, $action): bool { // 根据控制器和方法查询需要的权限,校验用户是否拥有该权限 // 省略代码,根据具体业务逻辑进行处理 return true; // 此处返回true表示权限校验通过 } }
3. Registrieren Sie die Middleware
Öffnen Sie die Datei config/autoload/middlewares.php und fügen Sie die folgende Konfiguration hinzu:
<?php declare(strict_types=1); return [ // ... 'auth' => AppMiddlewareAuthMiddleware::class, ];
4. Verwenden Sie Middleware
In der Routing-Konfiguration können wir Middleware für die Berechtigungsauthentifizierung verwenden. Zum Beispiel:
<?php declare(strict_types=1); use HyperfHttpServerRouterRouter; // 不需要登录的接口 Router::group([ 'middleware' => [], ], function () { // ... }); // 需要登录但是不需要认证权限的接口 Router::group([ 'middleware' => [ AppMiddlewareAuthMiddleware::class, ], ], function () { // ... }); // 需要认证权限的接口 Router::group([ 'middleware' => [ AppMiddlewareAuthMiddleware::class, ], ], function () { // ... });
Zusammenfassung:
Die Verwendung des Hyperf-Frameworks zur Berechtigungsauthentifizierung ist sehr einfach. Wir müssen lediglich eine AuthMiddleware-Middleware definieren und diese dann in der Routing-Konfiguration verwenden. Wenn die Anfrage die Middleware erreicht, wird unsere angepasste Berechtigungsauthentifizierungslogik ausgeführt. Wenn die Berechtigungsüberprüfung fehlschlägt, kann die entsprechende Fehlermeldung zurückgegeben werden. Auf diese Weise können wir die Berechtigungskontrollfunktion einfach implementieren.
Referenzlink:
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Hyperf-Framework für die Berechtigungsauthentifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!