رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در محدود کردن سطح دسترسی کاربران با RBAC
#1
درود
برای محدود کردن دسترسی طبق اموزش سایت اصلی به صورت زیر عمل کردم : 
<?php

namespace common\components;

use yii\rbac\Rule;

/**
* Checks if authorID matches user passed via params
*/
class ManagementRule extends Rule
{
   public $name = 'isOwner';

   /**
    * @param string|int $user the user ID.
    * @param Item $item the role or permission that this rule is associated with
    * @param array $params parameters passed to ManagerInterface::checkAccess().
    * @return bool a value indicating whether the rule permits the role or permission it is associated with.
    */
   public function execute($user, $item, $params)
   {
       return isset($params['barber_profile']) ? $params['barber_profile']->uid == $user : false;
   }
}

و کد ایجاد سطح دسترسی ها به صورت زیر :
Yii::$app->db->createCommand()->delete('auth_item')->execute();
       Yii::$app->db->createCommand()->delete('auth_rule')->execute();

       $auth = Yii::$app->authManager;

       $update_barber_profile = $auth->createPermission('update_barber_profile');
       $update_barber_profile->description = 'Update Barber Profile';
       $auth->add($update_barber_profile);  

       $delete_barber_profile = $auth->createPermission('delete_barber_profile');
       $delete_barber_profile->description = 'Delete Barber Profile';
       $auth->add($delete_barber_profile);

       $add_barber_profile = $auth->createPermission('add_barber_profile');
       $add_barber_profile->description = 'Add Barber Profile';
       $auth->add($add_barber_profile);  

       $view_barber_profile = $auth->createPermission('view_barber_profile');
       $view_barber_profile->description = 'View Barber Profile';
       $auth->add($view_barber_profile);


       $admin = $auth->createRole('admin');
       $auth->add($admin);
       $management = $auth->createRole('management');
       $auth->add($management);

       $auth->assign($admin,1);
       $auth->assign($management,3);
       $auth->assign($management,4);

       $auth->addChild($admin,$update_barber_profile);
       $auth->addChild($admin,$delete_barber_profile);
       $auth->addChild($admin,$add_barber_profile);
       $auth->addChild($admin,$view_barber_profile);
       $auth->addChild($management,$view_barber_profile);
       $auth->addChild($management,$update_barber_profile);



       // add the rule
       $rule = new \common\components\ManagementRule;
       $auth->add($rule);


       $updateOwnPlace = $auth->createPermission('update_own_place');
       $updateOwnPlace->description = 'Update own barber shop';
       $updateOwnPlace->ruleName = $rule->name;
       $auth->add($updateOwnPlace);
       $auth->addChild($updateOwnPlace, $update_barber_profile);
       $auth->addChild($management, $updateOwnPlace); 

       $viewOwnPlace = $auth->createPermission('view_own_place');
       $viewOwnPlace->description = 'View own barber shop';
       $viewOwnPlace->ruleName = $rule->name;
       $auth->add($viewOwnPlace);
       $auth->addChild($viewOwnPlace, $view_barber_profile);
       $auth->addChild($management, $viewOwnPlace);
و برای چک کردن سطح دسترسی به صورت زیر : 
    public function actionView($id)
   {
       $model = $this->findModel($id);
       if(yii::$app->user->can('view_own_place',['barber_profile'=>$model]))
       {
           return $this->render('view', [
                'model' => $model,
            ]);
       }
       else
           throw new \yii\web\ForbiddenHttpException();
   }
کد های بالا برای سطح دسترسی management به درستی کار میکند و فقط امکان مشاهده و اپدیت پست خود را به کاربر میده..ولی برای سطح دسترسی مدیر کل (admin) در هنگام مشاهده و اپدیت پست ها خطای سطح دسترسی نشان میدهد..برای اینکه برای ادمین دیگه سطح دسترسی چک نش، چه کنم؟؟..یا مشکل من از کجاست که این اشتباه رخ میده؟!..
با تشکر
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان