我们已经使用RBAC为CRUD实现了基于角色的简单权限,但现在我们还需要添加一个'可见性'功能可以将内容可见性(R)限制为仅限注册用户或仅限内容所有者。
那么,我们如何限制不同级别的内容可见性,例如
实现这一目标的最佳方法是什么,看起来RBAC没有直接的方法来解决这个问题。
答案 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);
}
}