تالار گفتمان nCIS.ir

نسخه‌ی کامل: دسترسی admin به author در سیستم rbac
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
این کد های 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 رو.
یعنی کسی با rbac کار نکرده تو Yii2 ؟!