السلام عليكم
كتبت مكتبة RBAC ل CodeIgniter مبنية على كثير من افكار CAuthManager من Yii
عملية التنصيب:
1-التحميل https://bitbucket.org/xmonader/ci-rbac
2-الإضافة مدمجة كوحدة اسمها authman في حال استخدامك HMVC فقط انسخها داخل مجلد modules لديك وإلا فقم بدمج مجلدات models و libraries مع المجلدات الأصلية في application
وقم بتعديل الكود
$this->CI->load->model("authman/authitem_model");to
$this->CI->load->model("authitem_model");
3- استورد ملف schema.sql
4- بس خلاص
مثال:
يوجد كنترولر hello مدمج مع ci-rbac ... سنستعرض الوظيفة index
$cp=$this->rbac_auth->createOperation("createPage", "create page");
$rp=$this->rbac_auth->createOperation("readPage", "read page");
$up=$this->rbac_auth->createOperation("updatePage", "update page");
$dp=$this->rbac_auth->createOperation("deletePage", "delete page");
$ci=$this->rbac_auth->createOperation("createIssue", "create issue");
$ri=$this->rbac_auth->createOperation("readIssue", "read issue");
$ui=$this->rbac_auth->createOperation("updateIssue", "update issue");
$di=$this->rbac_auth->createOperation("deleteIssue", "delete issue");هنا انشأنا العمليات المطلوبة لإدارة الريسورس Page و Issue وهي عمليات الإنشاء والحذف والتعديل والقراءة CRUD
احتفظ بناتج createOpration/createTask/createRole للاحقا سنحتاجها مع تحديد من يستطيع -شخص او مجموعة- فعل -عملية او مهمة-
إنشاء ال roles
$guestRole=$this->rbac_auth->createRole("guest", "guest role");
$this->rbac_auth->addChilds($guestRole, array($rp, $ri));هنا لدينا زائر بوصف guest role وقمنا بإضافة ابناء له (بحيث كل زائر تبع ال guest role يستطيع الوصول إلى readPage و readIssue
$rp, $ri
فقط تعبر عن ال id لكل عملية منهم ولهذا قلنا احتفظ بها :)
$memberRole=$this->rbac_auth->createRole("member", "member role");
$this->rbac_auth->addChilds($memberRole, array($guestRole, $cp, $ci, $up, $ui));هنا للعضو لديه كل عمليات الزوار وبالإضافة إلى $cp و $ci و $up و $ui وهي ال ids لإنشاء وتعديل الPage/Issue
$ownerRole=$this->rbac_auth->createRole("owner", "owner role");
$this->rbac_auth->addChilds($ownerRole, array($guestRole, $memberRole, $cp, $ci, $up, $ui, $dp, $di));هناالمالك وله الصلاحيات للسابقين بالإضافة إلى الحذف
$adminRole=$this->rbac_auth->createRole("admin", "admin role");
$admMan=$this->rbac_auth->createTask("adminManagement", "adminManagement");
$this->rbac_auth->addChilds($adminRole, array($ownerRole, $memberRole, $guestRole, $admMan));هنا الأدمن وله كل الصلاحيات للسابقين بالإضافة ل مهمة وهي adminManagement وهي اعتبرها كتغليف لعمليات منخفضة فبدلا ان تقول readPage و createPage و updatePage و deletePage كنا نستطيع نقول pageManagement ولكن كان سيضرنا لأننا نحتاج للتخصيص قليلا :)
$this->rbac_auth->assign("admin", 1); //admin
$this->rbac_auth->assign("member", 2); //someone.إسناد المستخدم لل role
اسندنا للعضو 1 الرول admin وللعضو 2 الرول member
$this->rbac_auth->assign("deleteIssue", 2);اضفنا للعضو 2 عملية deleteIssue بصورة مستقلة عن كونه member فتكون صلاحياته هي member و deleteIssue
الصلاحيات :من يصل إلى ماذا ؟
if ($this->rbac_auth->checkAccessForUser(1, "deletePage")){
echo "YES, admin can deletePage";
}else{
echo "No, Admin can't";
}
echo "<br />";
if ($this->rbac_auth->checkAccessForUser(2, "deletePage")){
echo "YES, user can deletePage";
}else{
echo "No, user can't";
}
echo "<br />";
if ($this->rbac_auth->checkAccessForUser(1, "deleteIssue")){
echo "YES, admin can deleteIssue";
}else{
echo "No, admin can't";
}
echo "<br />";
if ($this->rbac_auth->checkAccessForUser(2, "deleteIssue")){
echo "YES, user can deleteIssue";
}else{
echo "No, user can't";
}
echo "<br />";
if ($this->rbac_auth->checkAccessForUser(1, "adminManagement")){
echo "YES, admin can do adminManagement";
}else{
echo "No, Admin can't";
}
echo "<br />";
if ($this->rbac_auth->checkAccessForUser(2, "adminManagement")){
echo "YES, user can do adminManagement";
}else{
echo "No, user can't";
}
echo "<br />";فقط DB-backend
وبس شكرا