如何在yii中检查Controller中模型创建者的访问权限?

时间:2013-02-03 11:24:15

标签: php yii yii-components

我不知道控制器中模型创建者访问规则的最佳方法。我通常这样使用:

public function accessRules() {
    return array(
       ...

        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions' => array('docrop', 'cropimages','upload','setting','updateprivacy','updateuser','changepassword'),
            'expression' => array($this,'isCreator'),
        ),
       ... 

    );
}

然后在该控制器中我正在使用此功能来检查正确的访问规则

 public function isCreator(){
    $hasil=false;
    if(isset($_GET['id'])){
        $idUser=$_GET['id'];
        $hasil=$idUser==Yii::app()->user->id?true:false;
    }
    return $hasil;
 }

然后如果我想创建url,我总是在该url中使用id参数。这是最好的方法吗?或者有一种比这更好的替代方法?

1 个答案:

答案 0 :(得分:0)

您当前的方法将允许用户更改网址中的ID,使他们可以访问所有操作。如果你真的希望保留这种方法,我建议使用某种散列方法,以便与其结合使用时不那么强硬。他的IP地址更安全:$hashFromUrl == md5(Yii::app()->user->id . CHttpRequest::getUserHostAddress())。尽管如此,我仍然不鼓励这种做法。

由于方法名为isCreator(),我假设您要检查当前用户是否是数据库中现有模型的创建者/作者。您是否可以使用creatorId字段将此模型与当前用户的ID进行比较?那时不需要客户端黑客。