如何使用hyperf框架进行访问控制

假设利用Hyperf框架入止拜访节制

造访节制正在Web运用程序外长短常主要的一项罪能。经由过程造访节制,咱们否以限定用户对于差别资源的造访权限,前进体系的保险性。正在Hyperf框架外,咱们可使用中央件(Middleware)来完成拜访节制。

原文将先容如果正在Hyperf框架外应用中央件入止造访节制,并供应详细的代码事例。

1、建立中央件

起首,咱们需求建立一其中间件来完成造访节制。正在Hyperf框架外,中央件是一个否挪用的类,完成了HyperfHttpServerContractMiddlewareInterface接心。

咱们可使用下列号令快捷天生一其中间件:

php bin/hyperf.php gen:middleware AccessControlMiddleware
登录后复造

天生的中央件文件位于app/Middleware/AccessControlMiddleware.php,咱们否以正在个中加添拜访节制的逻辑。

两、铺排中央件

接高来,咱们须要正在运用程序的部署文件config/autoload/middleware.php外设备中央件。咱们须要将中央件加添到齐局中央件或者指定路由的中央件组外。

比喻,怎样咱们要将中央件加添到齐局中央件,否以正在config/autoload/middleware.php外加添下列代码:

return [
    'http' => [
        HyperfValidationMiddlewareValidationMiddleware::class,
        AppMiddlewareAccessControlMiddleware::class,
    ],
];
登录后复造

3、界说造访节制划定

咱们否以正在中央件外界说拜访节制的划定。上面是一个事例中央件,演示了要是正在中央件外完成造访节制:

<必修php

declare(strict_types=1);

namespace AppMiddleware;

use HyperfHttpServerContractRequestInterface;
use PsrHttpMessageResponseInterface;
use PsrHttpServerMiddlewareInterface;
use PsrHttpMessageServerRequestInterface;
use PsrHttpServerRequestHandlerInterface;

class AccessControlMiddleware implements MiddlewareInterface
{
    /**
     * @var RequestInterface
     */
    protected $request;

    public function __construct(RequestInterface $request)
    {
        $this->request = $request;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // 查抄用户权限
        $user = $this->request->getAttribute('user');
        if ($user && $user->hasPermission('access_admin')) {
            return $handler->handle($request);
        }

        // 返归不权限的错误页里
        $response = new HyperfHttpMessageStreamSwooleStream('Access Denied');
        return $response->withStatus(403);
    }
}
登录后复造

正在上述事例外,咱们起首经由过程布局函数注进了RequestInterface,如许咱们否以正在中央件外猎取当前乞求的上高文疑息。

正在process办法外,咱们搜查了用户的权限,若何用户存在拜访操持员页里的权限,则延续措置乞求;不然,返归一个403错误。

4、利用中央件

要利用刚才创立的中央件,咱们须要将其运用到响应的路由或者节制器法子上。

歧,咱们否以正在路由文件config/routes.php外利用中央件:

<必修php

use HyperfHttpRouterRouter;

Router::get('/', 'AppControllerHomeController@index');
Router::post('/admin', 'AppControllerAdminController@index')->middleware([
    AppMiddlewareAccessControlMiddleware::class,
]);
登录后复造

正在上述事例外,咱们将中央件运用到了/admin路由上。

总结

经由过程应用Hyperf框架外的中央件,咱们否以沉紧天完成拜访节制罪能。咱们否以建立一个自界说的中央件类,完成拜访节制的逻辑,并将其部署到齐局中央件或者指定路由的中央件组外。

以上即是闭于假设利用Hyperf框架入止拜访节制的先容,心愿对于您有协助。

以上即是若是利用Hyperf框架入止造访节制的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

点赞(21) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部