10-02-1396، 12:00 ق.ظ
درود
برای محدود کردن دسترسی طبق اموزش سایت اصلی به صورت زیر عمل کردم :
و کد ایجاد سطح دسترسی ها به صورت زیر :
با تشکر
برای محدود کردن دسترسی طبق اموزش سایت اصلی به صورت زیر عمل کردم :
<?php namespace commoncomponents; use yiirbacRule; /** * 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 commoncomponentsManagementRule; $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 yiiwebForbiddenHttpException(); }کد های بالا برای سطح دسترسی management به درستی کار میکند و فقط امکان مشاهده و اپدیت پست خود را به کاربر میده..ولی برای سطح دسترسی مدیر کل (admin) در هنگام مشاهده و اپدیت پست ها خطای سطح دسترسی نشان میدهد..برای اینکه برای ادمین دیگه سطح دسترسی چک نش، چه کنم؟؟..یا مشکل من از کجاست که این اشتباه رخ میده؟!..
با تشکر