如何在 yii 中检查控制器中模型创建者的访问


How to check access of the model creator in Controller in yii?

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

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 参数。这是最好的方法吗?或者有比这更好的替代方法?

您当前的方法允许用户更改 url 中的 id,从而授予他们访问所有操作的权限。如果您真的想保留此方法,我建议您使用某种哈希方法,使其不那么暴力,例如他的IP地址以提高安全性:$hashFromUrl == md5(Yii::app()->user->id . CHttpRequest::getUserHostAddress())。尽管如此,我不鼓励这种做法。

由于该方法被称为isCreator(),我假设您要检查当前用户是否是数据库中现有模型的创建者/作者。您不能使用此模型的creatorId字段与当前用户的 id 进行比较吗?然后不需要客户端黑客。