【发布时间】:2015-06-14 15:32:33
【问题描述】:
使用 Yii 框架我遇到了一个我自己无法解决的问题。
我如何很好地检查对模型某些属性的访问?
上下文:
- 我使用 RBAC,一个用户可能同时拥有多个角色
- 我有一个带有一堆属性的模型(例如,我们称之为 Profile)
- 有些属性是允许任何注册用户编辑的(
email、age、favorite color等),还有一些——只有特定角色的用户才能编辑(is_banned——可以修改)由版主或管理员,balance- 只能由管理员等更改)
我已经做过的事情: 目前我只看到一种可能的方法来完成这项任务:
function actionUpdate($id)
{
$model = Profile::model()->findByPk($id);
if (!$this->user->checkAccess('editProfile')) {
throw new AccessDeniedException();
}
if (isset($_POST['is_banned'])) {
if (!$this->user->checkAccess('toggleBan')) {
unset($_POST['is_banned']);
}
}
if (isset($_POST['balance'])) {
if (!$this->user->checkAccess('changeBalance')) {
unset($_POST['balance']);
}
}
$model->setAttributes($_POST);
$model->save();
}
有没有更好的方法来解决这样的任务?谢谢。
【问题讨论】: