如何使用Hyperf框架進(jìn)行權(quán)限認(rèn)證

如何使用Hyperf框架進(jìn)行權(quán)限認(rèn)證

如何使用Hyperf框架進(jìn)行權(quán)限認(rèn)證

引言:
在一個(gè)Web應(yīng)用程序中,權(quán)限認(rèn)證是一項(xiàng)非常重要的功能。通過(guò)權(quán)限認(rèn)證,我們可以限制某些用戶只能訪問(wèn)特定的資源和功能,保護(hù)敏感數(shù)據(jù)不被未授權(quán)的用戶訪問(wèn)。本文將介紹如何使用Hyperf框架進(jìn)行權(quán)限認(rèn)證,并且給出具體的代碼示例。

一、配置權(quán)限表和角色表
在開(kāi)始使用Hyperf框架進(jìn)行權(quán)限認(rèn)證之前,我們需要先配置權(quán)限表和角色表。打開(kāi)項(xiàng)目中的.env文件,添加以下配置:

# 權(quán)限表 PERMISSION_TABLE=admin_permissions  # 角色表 ROLE_TABLE=admin_roles

然后在數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)應(yīng)的表格。

二、定義權(quán)限中間件
Hyperf框架提供了中間件機(jī)制,可以在請(qǐng)求處理前后進(jìn)行一些操作。我們可以利用中間件來(lái)進(jìn)行權(quán)限認(rèn)證。首先,在app/Middleware目錄下創(chuàng)建一個(gè)新的文件AuthMiddleware.php,代碼如下:

<?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-&gt;logger = $loggerFactory-&gt;get('auth');     }      /**      * @param RequestInterface $request      * @param ResponseInterface $response      * @param callable $next      * @return ResponseInterface      */     public function process(RequestInterface $request, callable $next): ResponseInterface     {         // 獲取當(dāng)前請(qǐng)求的控制器和方法         $dispatched = $this-&gt;container-&gt;get(Dispatched::class);         $controller = $dispatched-&gt;handler-&gt;callback[0];         $action = $dispatched-&gt;handler-&gt;callback[1];          // 進(jìn)行權(quán)限認(rèn)證         $isAuth = $this-&gt;checkPermission($controller, $action);          if (!$isAuth) {             // 權(quán)限不足,返回錯(cuò)誤提示             return $response-&gt;json(['code' =&gt; 403, 'message' =&gt; 'Permission Denied']);         }          // 繼續(xù)執(zhí)行下一個(gè)中間件         return $next($request);     }      /**      * @param $controller      * @param $action      * @return bool      */     protected function checkPermission($controller, $action): bool     {         // 根據(jù)控制器和方法查詢需要的權(quán)限,校驗(yàn)用戶是否擁有該權(quán)限         // 省略代碼,根據(jù)具體業(yè)務(wù)邏輯進(jìn)行處理          return true; // 此處返回true表示權(quán)限校驗(yàn)通過(guò)     } }

三、注冊(cè)中間件
打開(kāi)config/autoload/middlewares.php文件,添加以下配置:

<?php declare(strict_types=1);  return [     // ...          'auth' => AppMiddlewareAuthMiddleware::class, ];

四、使用中間件
在路由配置中,我們可以使用中間件來(lái)進(jìn)行權(quán)限認(rèn)證。例如:

<?php declare(strict_types=1);  use HyperfHttpServerRouterRouter;  // 不需要登錄的接口 Router::group([     'middleware' => [], ], function () {     // ... });  // 需要登錄但是不需要認(rèn)證權(quán)限的接口 Router::group([     'middleware' =&gt; [         AppMiddlewareAuthMiddleware::class,     ], ], function () {     // ... });  // 需要認(rèn)證權(quán)限的接口 Router::group([     'middleware' =&gt; [         AppMiddlewareAuthMiddleware::class,     ], ], function () {     // ... });

總結(jié):
使用Hyperf框架進(jìn)行權(quán)限認(rèn)證非常簡(jiǎn)單。我們只需要定義一個(gè)AuthMiddleware中間件,然后在路由配置中使用即可。當(dāng)請(qǐng)求到達(dá)該中間件時(shí),會(huì)執(zhí)行我們自定義的權(quán)限認(rèn)證邏輯。如果權(quán)限校驗(yàn)不通過(guò),可以返回相應(yīng)的錯(cuò)誤提示。通過(guò)這種方式,我們可以輕松地實(shí)現(xiàn)權(quán)限控制的功能。

參考鏈接:

  1. Hyperf官方文檔:https://hyperf.wiki/2.2/#/zh-cn/middleware/middleware?id=中間件注冊(cè)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享