我不知道控制器中模型创建者的访问规则的最佳方法。我通常这样使用:
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 进行比较吗?然后不需要客户端黑客。