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.