Utilitas sistem akses berbasis peran Alexya.
Izin adalah cara bagi pengguna yang berwenang untuk melakukan tindakan tertentu.
AlexyaRolesPermission mewakili izin yang dapat ditugaskan untuk peran tertentu.
Izin terdiri dari pengidentifikasi, judul dan bendera status.
Anda dapat dengan mudah memperluas kelas ini untuk memberikan lebih banyak fungsi seperti nama alternatif, peringkat ...
Misalnya, dalam sistem file, setiap pengguna harus memiliki izin untuk membaca/menulis ke file tertentu:
<?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 );
}
}Peran adalah wadah dari berbagai izin.
AlexyaRolesRole mewakili peran dengan sendirinya.
Ini memiliki pengidentifikasi untuk peran, judul dan serangkaian Permission dengan izin yang diberikan untuk peran ini. Atau, peran dapat memiliki peran induk untuk warisan.
Ini juga memiliki bilangan bulat yang mewakili prioritas peran, semakin besar jumlahnya, prioritas terbanyak yang dimilikinya.
Metode hasPermission menerima pengidentifikasi izin atau contoh izin dan memeriksa bahwa peran ini telah diberikan dengan izin tersebut.
Untuk versi yang lebih pendek, Anda dapat menggunakan can , karena lebih pendek> lebih lama.
Contoh:
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 );
}
}Setelah Anda memiliki izin dan peran, Anda perlu menentukan peran mana yang telah diberikan izin mana.
Izin dapat diaktifkan, dinonaktifkan atau diwarisi. Jika izin diwarisi, peran akan memeriksa status izin itu dalam peran induk, jika tidak ada peran orang tua itu akan diperlakukan sebagai cacat.
Menambahkan izin ke peran semudah memanggil metode addPermission dengan izin untuk ditambahkan.
Contoh:
$ 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()); Untuk memeriksa apakah suatu peran telah memberikan izin tertentu, Anda dapat menggunakan hasPermission atau metode can :
$ canRead -> can ( " read " ); // true
$ canRead -> can ( 2 ); // false (Write permission has ID 2)
$ canRead -> can ( new Read ()); // true Metode getPermission mengembalikan izin dari peran:
$ read = $ canRead -> getPermission ( new Read ()); // The Read permission sent through `addPermission`
$ write = $ canRead -> getPermission ( " write " ); // null; Sekarang kami memiliki peran dan izin, kami membutuhkan pengguna untuk menetapkannya.
Kelas AlexyaRolesUser mewakili pengguna, di mana peran ditetapkan.
Ini adalah kelas yang harus Anda perluas untuk menambahkan peran kepada pengguna Anda karena memberikan hasPermission dan metode can memeriksa apakah pengguna ini memiliki izin yang diberikan.
Ini juga memiliki metode addRole dan removeRole untuk menambah/menghapus peran.
Contoh:
$ 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.