الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

CI-RBAC

بدأه ahmed_youssef في 6 مايو 2011 · 2 رد · 613 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كتبت مكتبة 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

وبس شكرا

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 6 مايو 2011 في 11:25

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

تم إزالة الإعتماديات MY_Model و MY_Controller

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة