首頁  >  文章  >  php框架  >  如何使用Hyperf框架進行權限認證

如何使用Hyperf框架進行權限認證

WBOY
WBOY原創
2023-10-20 19:31:46613瀏覽

如何使用Hyperf框架進行權限認證

如何使用Hyperf框架進行權限認證

引言:
在一個Web應用程式中,權限認證是一項非常重要的功能。透過權限認證,我們可以限制某些使用者只能存取特定的資源和功能,保護敏感資料不被未經授權的使用者存取。本文將介紹如何使用Hyperf框架進行權限認證,並給予具體的程式碼範例。

一、設定權限表和角色表
在開始使用Hyperf框架進行權限認證之前,我們需要先設定權限表和角色表。開啟專案中的.env文件,新增以下配置:

# 权限表
PERMISSION_TABLE=admin_permissions

# 角色表
ROLE_TABLE=admin_roles

然後在資料庫中建立對應的表格。

二、定義權限中間件
Hyperf框架提供了中間件機制,可以在請求處理前後進行一些操作。我們可以利用中間件來進行權限認證。首先,在app/Middleware目錄下建立新的檔案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->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表示权限校验通过
    }
}

三、註冊中間件
開啟config/autoload/middlewares.php文件,新增以下設定:

<?php

declare(strict_types=1);

return [
    // ...
    
    'auth' => AppMiddlewareAuthMiddleware::class,
];

四、使用中間件
在路由設定中,我們可以使用中間件來進行權限認證。例如:

<?php

declare(strict_types=1);

use HyperfHttpServerRouterRouter;

// 不需要登录的接口
Router::group([
    'middleware' => [],
], function () {
    // ...
});

// 需要登录但是不需要认证权限的接口
Router::group([
    'middleware' => [
        AppMiddlewareAuthMiddleware::class,
    ],
], function () {
    // ...
});

// 需要认证权限的接口
Router::group([
    'middleware' => [
        AppMiddlewareAuthMiddleware::class,
    ],
], function () {
    // ...
});

總結:
使用Hyperf框架進行權限認證非常簡單。我們只需要定義一個AuthMiddleware中間件,然後在路由配置中使用即可。當請求到達該中間件時,會執行我們自訂的權限認證邏輯。如果權限校驗不通過,可以傳回對應的錯誤提示。透過這種方式,我們可以輕鬆地實現權限控制的功能。

參考連結:

  1. Hyperf官方文件:https://hyperf.wiki/2.2/#/zh-cn/middleware/middleware?id=中介軟體註冊

以上是如何使用Hyperf框架進行權限認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn