0

我有一张桌子叫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。

但是在我的情况下,任何客户都可以编辑任何网站。

有没有办法拒绝他们访问而不在控制器上硬编码检查?

我的意思是应该有一种方法可以让蛋糕中的魔法只能找到属于该客户端的网站

4

1 回答 1

1

现在,如果您使用客户端模型正确设置了身份验证组件,我的意思是一个客户端不能修改其他客户端,但是您需要交叉检查他们正在编辑的网站是否属于他们,这可能会有所帮助..

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;
        }
    }

您将使用 Now 调用该函数,$this->_check_member($client_id,$website_id);仅对该网站所属的客户端返回 1。

但是,如果您的客户能够相互编辑,您应该查看 auth 组件。这是一个视频教程Auth Component setup,如果您在使用客户端模型设置 auth 组件时遇到问题,因为每个教程都显示了如何使用默认的用户模型进行设置,请在评论中告诉我。

于 2013-09-03T10:42:51.460 回答