我不知道控制器中模型创建者访问规则的最佳方法。我通常这样使用:
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参数。这是最好的方法吗?或者有一种比这更好的替代方法?
答案 0 :(得分:0)
您当前的方法将允许用户更改网址中的ID,使他们可以访问所有操作。如果你真的希望保留这种方法,我建议使用某种散列方法,以便与其结合使用时不那么强硬。他的IP地址更安全:$hashFromUrl == md5(Yii::app()->user->id . CHttpRequest::getUserHostAddress())
。尽管如此,我仍然不鼓励这种做法。
由于方法名为isCreator()
,我假设您要检查当前用户是否是数据库中现有模型的创建者/作者。您是否可以使用creatorId
字段将此模型与当前用户的ID进行比较?那时不需要客户端黑客。