我在执行此操作时遇到问题,用户完全只能更新自己的数据,但遗憾的是管理员无法更新所有内容,只需像任何普通用户一样更新自己。
我的想法是将$id = Yii::app()->user->id;
放在函数aactionUpdate中,如下所示:
public function actionUpdate($id)
{
$id = Yii::app()->user->id;
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
$this->redirect(array('view','id'=>$model->id_user));
}
$this->render('update',array(
'model'=>$model,
));
}
然后我想我必须将'update'
作为管理员放在actionRules中,如下所示:
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('create','captcha'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('view','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('index','admin','delete', 'update'),
//'users'=>array('admin'),
'expression'=>'$user->getLevel()<=1',
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
但是作为管理员,仍然无法更新所有内容,只能更新自己。
我应该采取什么方法?请给我一些建议,谢谢。
* PS:我没有使用任何用户和权限扩展。感谢。
答案 0 :(得分:1)
伙计,但您明确在actionUpdate()
的第一行宣布您总是想要更新当前登录的用户!你的问题是什么?
如果您希望普通用户自行更新并且管理员更新任何人,那么给定您的框架代码的第一行应该如下所示:
$isAdmin = Yii::app()->user->getLevel() <=1; // or how you define admin in your case.
if (!$isAdmin)
$id = Yii::app()->user->id;
通常您定义RBAC并执行以下操作:
$isAdmin = Yii::app()->user->checkAccess('admin');