سلام
این کد های rbac :
و این rule :
و اینم اکشن آپدیت:
این کد های rbac :
$auth = Yii::$app->authManager; $createPost = $auth->createPermission('create_post'); $createPost->description = 'Create a Post'; $auth->add($createPost); $updatePost = $auth->createPermission('update_post'); $updatePost->description = 'Update a Post'; $auth->add($updatePost); $deletePost = $auth->createPermission('delete_post'); $deletePost->description = 'Delete a Post'; $auth->add($deletePost); $author = $auth->createRole('author'); $auth->add($author); $auth->addChild($author, $createPost); $auth->addChild($author, $updatePost); $admin = $auth->createRole('admin'); $auth->add($admin); $auth->addChild($admin, $createPost); $auth->addChild($admin, $updatePost); $auth->addChild($admin, $deletePost); $auth->addChild($admin, $author); $default = $auth->createRole('default'); $auth->add($default); $auth->assign($admin, 1); $auth->assign($author, 2); $auth->assign($default, 3); $rule = new commoncomponentAuthorRule; $auth->add($rule); $updateOwnPost = $auth->createPermission('updateOwnPost'); $updateOwnPost->description = 'Update own post'; $updateOwnPost->ruleName = $rule->name; $auth->add($updateOwnPost); $auth->addChild($updateOwnPost, $updatePost); $auth->addChild($author, $updateOwnPost);
و این rule :
namespace commoncomponent; use yiirbacRule; class AuthorRule extends Rule { public $name = 'isAuthor'; public function execute($user, $item, $params) { return isset($params['post']) ? $params['post']->user_id == $user : false; } }
و اینم اکشن آپدیت:
if(Yii::$app->user->can('updateOwnPost', ['post'=>$model])) { if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('update', [ 'model' => $model, ]); } }else { throw new yiiwebHttpException(404, 'شما اجازه ندارید.'); }من می خواستم که author فقط بتونه پست های خودش رو آپدیت کنه نه پست های دیگران رو و admin هم پست های خودش و هم پست های author رو.