0

私はと呼ばれるwebsitesテーブルと呼ばれるテーブルを持っていますclients

クライアントには多くの Web サイトがあり、Web サイトはクライアントに属します

このために、次の接続を my に作成しました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'
        )
    );

これで、クライアントが編集に行くときはいつでも、クライアントはそのユーザーに属する Web サイト ID のみを編集できるようになります。

ただし、私の場合、どのクライアントも任意の Web サイトを編集できます。

コントローラーでチェックをハードコーディングせずにアクセスを拒否する方法はありますか?

つまり、ケーキの魔法がその clientid に属する Web サイトのみを見つける方法があるはずです。

4

1 に答える 1

1

ここで、クライアント モデルでAuth コンポーネントを適切に設定した場合、1 つのクライアントが他のクライアントを変更できないことを意味しますが、編集している Web サイトがそれらに属しているかどうかをクロス チェックする必要があります。

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);この Web サイトが属するクライアントに対してのみ 1 が返されます。

ただし、クライアントが相互に編集できる場合は、認証コンポーネントを調べる必要があります。ここにビデオ チュートリアルAuth Component setupがあります。クライアント モデルを使用して認証コンポーネントを設定する際に問題がある場合は、すべてのチュートリアルでデフォルトのユーザー モデルを使用して設定する方法が示されているため、コメントでお知らせください。

于 2013-09-03T10:42:51.460 に答える