أليكسيا الأدوار المستندة إلى الدور الأدوات المساعدة.
الأذونات هي وسيلة للمستخدمين المعتمدين لإجراء إجراءات معينة.
يمثل Class 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 );
}
}الأدوار هي حاويات الأذونات المختلفة.
يمثل الدور Class AlexyaRolesRole دورًا في حد ذاته.
لديها معرف للدور وعنوان ومجموعة من Permission مع الأذونات الممنوحة لهذا الدور. بدلاً من ذلك ، يمكن أن يكون للدور دور الوالدين للميراث.
كما أن لديها عدد صحيح يمثل أولوية الدور ، كلما كان الرقم أكبر ، وهو أولوية أكثرها.
تقبل الطريقة hasPermission معرف الإذن أو مثيل الإذن والتحقق من أن هذا الدور قد تم منحه بإذن.
للحصول على إصدار أقصر ، يمكنك استخدام can ، 'Cuz أقصر> لفترة أطول.
مثال:
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.