alexya-framework / roles
Alexya的角色基于访问系统工具
Requires
- php: >=7.0
- alexya-framework/tools: >=3.2
This package is not auto-updated.
Last update: 2024-09-15 02:43:20 UTC
README
Alexya的角色基于访问系统工具。
内容
创建权限
权限是授权用户执行特定操作的方式。
类\Alexya\Roles\Permission
代表可以分配给特定角色的权限。
权限由一个标识符、一个标题和一个状态标志组成。
您可以轻松扩展此类以提供更多功能,例如替代名称、等级...
例如,在文件系统中,每个用户都应该有读取/写入某些文件的权限
<?php namespace Application\RBAC\Permissions; use Alexya\Roles\Permission; class Read extends Permission { /** * Constructor. */ public function __construct() { parent::__construct(1, "read", Permission::STATUS_INHERITED); } } class Write extends Permission { /** * Constructor. */ public function __construct() { parent::__construct(2, "write", Permission::STATUS_INHERITED); } }
创建角色
角色是各种权限的容器。
类\Alexya\Roles\Role
代表一个角色本身。
它有一个角色的标识符、一个标题和一个包含此角色授予权限的Permission
数组。或者,一个角色可以有一个父角色以实现继承。
它还有一个表示角色优先级的整数,数字越大,优先级越高。
方法hasPermission
接受一个权限的标识符或权限的实例,并检查该角色是否已授予该权限。
为了更简洁的版本,您可以使用can
,因为短于长。
示例
namespace Application\RBAC\Roles; use Alexya\Roles\Role; class CanRead extends Role { /** * Constructor */ public function __construct() { parent::__construct(1, "can_read", 1); } } class CanWrite extends Role { /** * Constructor */ public function __construct() { parent::__construct(2, "can_write", 1); } } class CanReadAndWrite extends Role { /** * Constructor. */ public function __construct() { parent::__construct(3, "can_read_and_write", 2); } }
将权限添加到角色
一旦您有了所需的权限和角色,您需要指定哪些角色被授予哪些权限。
权限可以是启用的、禁用的或继承的。如果权限被继承,则角色将检查父角色中该权限的状态,如果没有父角色,则将其视为禁用。
将权限添加到角色与调用带有要添加的权限的addPermission
方法一样简单。
示例
$canRead = new CanRead(); $canRead->addPermission(new Read()); $canWrite = new CanWrite(); $canWrite->addPermission(new Write()); $canReadAndWrite = new CanReadAndWrite(); $canReadAndWrite->addPermission(new Read()); $canReadAndWrite->addPermission(new Write()); // Alternatively you could have set the parent role like this: // $canReadAndWrite = new CanReadAndWrite(); // $canReadAndWrite->parent = $canRead; // $canReadAndWrite->addPermission(new Write());
要检查角色是否已授予特定权限,您可以使用hasPermission
或can
方法
$canRead->can("read"); // true $canRead->can(2); // false (Write permission has ID 2) $canRead->can(new Read()); // true
方法getPermission
从角色返回一个权限
$read = $canRead->getPermission(new Read()); // The Read permission sent through `addPermission` $write = $canRead->getPermission("write"); // null;
创建用户
现在我们有了角色和权限,我们需要用户来分配它们。
类\Alexya\Roles\User
代表一个用户,其中分配了角色。
这是您应该扩展以将角色添加到您的用户的类,因为它提供了用于检查此用户是否被授予任何权限的hasPermission
和can
方法。
它还具有添加/删除角色的addRole
和removeRole
方法。
示例
$user = new User(); $user->addRole(2); $user->can(new Read()); // false $user->can(new Write()); // true $user->addRole(new CanRead()); $user->can("read"); // true $user->can(new Write()); // true $user->getRole("can_write") ->getPermission("write") ->status = Permission::STATUS_DISABLED; $user->can(new Read()); // true $user->can(new Write()); // false $user->addRole(new CanReadAndWrite()); $user->can(new Read()); // true $user->can(new Write()); // true because the priority of `CanReadAndWrite` is bigger than the `CanWrite` priority.