codevia / permission-middleware
适用于 Slim 4 的 PHP 权限中间件
v1.0.2
2022-07-01 15:44 UTC
Requires
- slim/slim: ^4.10
README
适用于 Slim 4 的 PHP 权限中间件。需要 PHP >= 8.0。
在定义您的路由时,您可能希望验证访问者是否有权访问每个资源。但不想浪费时间编写难以维护的每个控制器方法的守卫。因此,这个权限中间件就是为了您编写的。
用法
您的权限列表必须是一个扩展 PermissionList
类的类。每个权限级别必须是一个位运算数常量(1, 2, 4, 8...)。
// src/Permission.php namespace App; use Codevia\PermissionMiddleware\PermissionList; class Permission extends PermissionList { public const GUEST = 1; public const USER = 2; public const ADMIN = 4; }
您可以在会话中这样存储访问者的权限级别
use App\Permission; use Codevia\PermissionMiddleware\PermissionMiddleware; $_SESSION[PermissionMiddleware::SESSION_PERMISSION] = Permission::USER;
当您将权限中间件添加到您的 Slim 应用中时,您必须给它您的权限列表(默认值,以防它未包含在 $_SESSION
中)。
// public/index.php require_once __DIR__ . '../bootstrap.php'; use App\Permission; use Codevia\PermissionMiddleware\PermissionMiddleware; use Slim\Factory\AppFactory; $app = AppFactory::create(); $app->addMiddleware(new PermissionMiddleware( new Permission(Permission::GUEST) // Permission::GUEST is your default ));
现在您可以在您定义的每个路由上设置权限级别。这样做的唯一方法是使用数组 容器解析。这意味着您的应用程序必须实现控制器和方法。
use App\Permission as P; $app->get('/test', [TestController::class, 'testMethod', P::USER | P::ADMIN]); $app->get('/public', [TestController::class, 'publicMethod', P::GUEST]);
如果访问者权限被拒绝,则会抛出 Slim\Exception\HttpForbiddenException
。