delboy1978uk / bone-passport
Bone框架的ACL包
v1.0.0
2020-09-26 18:18 UTC
Requires
- php: >7.1
- delboy1978uk/barnacle: ^2.2
- delboy1978uk/bone-doctrine: ^1.1
- delboy1978uk/passport: *
Requires (Dev)
- roave/security-advisories: dev-master
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') ]);