delboy1978uk/bone-passport

Bone框架的ACL包

v1.0.0 2020-09-26 18:18 UTC

This package is auto-updated.

Last update: 2024-08-27 03:00:52 UTC


README

Bone Mvc框架的护照包

安装

使用Composer

composer require delboy1978uk/bone-passport

使用

简单地将以下内容添加到config/packages.php

<?php

// use statements here
use Bone\Passport\PassportPackage;
use Del\Passport\PassportPackage as DelPassportPackage;

return [
    'packages' => [
        // packages here...,
        DelPassportPackage::class,
        PassportPackage::class,
    ],
    // ...
];

现在运行bone命令以获取数据库更改,创建数据库迁移,然后运行它们

bone migrant:diff
bone migrant:migrate

角色

可以通过使用bone命令通过命令行设置角色

bone passport:role --help

Description:
  Manages roles.

Usage:
  passport:role <operation> <role>

Arguments:
  operation             add or remove
  role                  The role name

您可以使用bone命令再次将角色分配给用户

bone passport:admin --help

Description:
  User role admin.

Usage:
  passport:admin <operation> <role> <userId> [<entityId>]

Arguments:
  operation             grant or revoke
  role                  The role name
  userId                The ID of the user
  entityId              The ID of the entity, if any

中间件

Bone Passport附带易于使用的中间件以保护路由。没有所需凭证的任何人将收到403未经授权的响应。

在包类的addRoutes()方法中,首先创建中间件

public function addRoutes(Container $c, Router $router): Router
{
    $passportControl = $c->get(PassportControl::class);
    $middleware = new PassportControlMiddleware($passportControl);

    // routes here
}

要保护端点,您应该已经使用了一个如SessionAuth之类的中间件,该中间件提供了一个带有设置为user属性的User对象的PSR-7 RequestInterface。添加到具有所需选项的中间件数组中

$router->map('GET', '/lock-me', [MyController::class, 'someAction'])->middlewares([
    $c->get(SessionAuth::class), 
    $middleware->withOptions('admin')
]);

实体ID

有时一个角色可能只会控制各种特定的实体。例如,联赛管理员将负责该联赛中的特定俱乐部。通常,该实体的ID将位于URL中。您可以通过传递路由变量名称来锁定此操作

$router->map('GET', '/books/edit/{id:number}', [MyController::class, 'someAction'])->middlewares([
    $c->get(SessionAuth::class), 
    $middleware->withOptions('book-admin', 'id')
]);