codevia/permission-middleware

适用于 Slim 4 的 PHP 权限中间件

v1.0.2 2022-07-01 15:44 UTC

This package is auto-updated.

Last update: 2024-09-29 06:09:08 UTC


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