Roles
1.0.0
Alexya的基于角色的访问系统实用程序。
权限是授权用户执行某些操作的方式。
类AlexyaRolesPermission表示可以分配给特定角色的权限。
权限由标识符,标题和状态标志组成。
您可以轻松地扩展此类,以提供更多功能,例如替代名称,排名...
例如,在文件系统中,每个用户应具有读/写入某些文件的权限:
<?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 );
}
}角色是各种权限的容器。
类AlexyaRolesRole本身代表了一个角色。
它具有该角色,标题和一系列Permission的标识符,并获得了该角色的授权权限。另外,角色可以具有继承的父角色。
它还具有代表角色优先级的整数,数字越大,最优先级。
hasPermission方法接受许可或许可实例的标识符,并检查是否已在许可后授予此角色。
对于较短的版本,您可以使用can ,'cuz Shorter>更长。
例子:
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; 现在,我们已经有了角色和权限,我们需要用户来分配它们。
类AlexyaRolesUser代表分配角色的用户。
这是您应该扩展的类,以便为用户添加角色,因为它提供了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.