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使用できます。
例:
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 Methodを使用できます。
$ 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; 役割と許可があるので、それらを割り当てるにはユーザーが必要です。
class 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.