Cakephp限制用户的项目视图

时间:2013-09-03 09:29:55

标签: php cakephp associations

我有一个名为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的网站

1 个答案:

答案 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组件时遇到问题,因为每个教程都会显示如何使用用户模型执行此操作,这是默认情况,请在评论中告诉我。