Yii - 管理员可以更新所有内容,而用户只能更新自己的帐户

时间:2014-03-12 03:04:17

标签: php yii

我在执行此操作时遇到问题,用户完全只能更新自己的数据,但遗憾的是管理员无法更新所有内容,只需像任何普通用户一样更新自己。 我的想法是将$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:我没有使用任何用户和权限扩展。感谢。

1 个答案:

答案 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');