我有一个名为websites
的表和一个名为clients
客户有很多网站,网站属于客户
现在我已经在我的Models
中创建了以下连接:
class Website extends AppModel
{
public $belongsTo = array(
'Client' => array(
'className' => 'Client',
'dependent' => false,
'foreignKey' => 'client_id'
)
);
}
class Client extends AppModel
{
public $hasMany = array(
'Website' =>array(
'className' => 'Website',
'dependent' => true,
'foreignKey' => 'client_id'
)
);
现在,只要客户端进行编辑,客户端就只能编辑属于该用户的网站ID。
但在我的情况下,任何客户都可以编辑任何网站。
有没有办法拒绝他们访问而无需在控制器上硬编码检查?
我的意思是应该有一种方式,蛋糕中的魔法只能找到属于那个clientid的网站
答案 0 :(得分:1)
现在,如果您已使用客户端模型正确设置Auth Component,我的意思是一个客户端无法修改其他客户端,但您需要交叉检查他们正在编辑的网站是否属于他们或不帮助..
public function _check_member($client,$website){
$this->loadModel('Website');
$options = array(
'conditions' => array('Website.client_id' => $client,'Website.id' => $website),
'recursive' => 0
);
$website = $this->Website->find('first', $options);
if($website){
return true;
}else{
return false;
}
}
您将使用$this->_check_member($client_id,$website_id);
调用该函数现在,只有该网站所属的客户才会返回1.
但是如果您的客户能够相互编辑,您应该查看auth组件。这是一个视频教程Auth Component setup,如果您在使用客户端模型设置auth组件时遇到问题,因为每个教程都会显示如何使用用户模型执行此操作,这是默认情况,请在评论中告诉我。