每个内容可见性Yii2取决于角色

时间:2015-03-02 11:59:14

标签: permissions visibility yii2

我们已经使用RBAC为CRUD实现了基于角色的简单权限,但现在我们还需要添加一个'可见性'功能可以将内容可见性(R)限制为仅限注册用户或仅限内容所有者。

那么,我们如何限制不同级别的内容可见性,例如

  • PUBLIC:任何人都可以看到内容,包括匿名
  • 内部:只有注册用户才能看到内容
  • PRIVATE:只有创作者才能看到内容

实现这一目标的最佳方法是什么,看起来RBAC没有直接的方法来解决这个问题。

2 个答案:

答案 0 :(得分:1)

我认为可以通过在模型中使用defaultScope来解决问题。因此,在给出内容之前,我们可以检查用户数据的当前角色并给出必要的条件。

public static function find()
{
    $userRoleArray = \Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
    $userRole = current($userRoleArray)->name;

    if ($userRole == 'admin') {
        return parent::find()->where("Your condition");
    } elseif ($userRole == 'moderator') {
        return parent::find()->where("Your condition");
    }
}

答案 1 :(得分:0)

你可以创建一个权限函数,并在每个将用户角色作为参数的函数中运行,并返回true或重定向到不允许的页面。

这是我尝试过的东西,但您可以根据需要进行修改。

public function allowUser($min_level) { 
        //-1 no login required 0..3: admin level
        $userRole = //get user role;
        $current_level = -1;
        if (Yii::$app->user->isGuest)
            $current_level = 0;
        else
            $current_level = userRole;
        if ($min_level > $current_level) {
            $this->redirect(array("/pages/not-allowed"),true);
        }
    }