0

isAuthorizedレコード ID がユーザーに属していない場合、メソッドへのアクセスを拒否するために使用しています。プロファイルには多くのドキュメントを含めることができ、ドキュメントは 1 つのプロファイルに属します。

コントローラー/DocumentsController.php

public function add($id = null) {
    if ($this->request->is('post')) {
        $this->request->data['Document']['profile_id'] = $id;
        $this->request->data['Document']['user_id'] = $this->Auth->user('id');
        $this->Document->create();
        if ($this->Document->save($this->request->data)) {
            $this->Session->setFlash(__('The document has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The document could not be saved. Please, try again.'));
        }
    }
}

public function isAuthorized($user) {
    if ($this->action === 'index') {
        return true;
    }

    if (in_array($this->action, array('view', 'add', 'edit', 'delete'))) {
        $document_id = $this->request->params['pass'][0];
        if ($this->Document->isOwnedBy($document_id, $user['id'])) {
            return true;
        }
    }

    return parent::isAuthorized($this->Auth->user());
}

モデル/Document.php

public function isOwnedBy($document, $user) {
    return $this->field('id', array('id' => $document, 'user_id' => $user)) === $document;
}

Cake リンク ヘルパーを使用して、プロファイル ビューの 1 つからprofile idas$idを渡しています。docments/add

ビュー/プロファイル/view.ctp

echo $this->Html->link('New Document',
    array('controller' => 'documents', 'action' => 'add',$profile['Profile']['id'])
);

New Document from をクリックすると何が起こるかとprofiles/viewいうと、リクエストは送信されますが、リダイレクトされないか、ページが更新されるだけか、リダイレクトされて に戻るか、どちらかわかりprofiles/viewません。私の最初の推測は、内profile idisAuthorizedコールバックでを定義していないためDocumentsControllerisOwnedByfalse を返しているということです。isAuthorized内でプロファイル ID を取得する方法に関する提案はありますDocumentsControllerか?

前もって感謝します!

4

1 に答える 1

0

これに対する解決策は比較的簡単です。isAuthorized を別のコントローラーからのパラメーターで使用する場合は、必ず正しいモデルを参照してください。

if ($this->Document->Profile->isOwnedBy($document_id, $user['id'])) {
    return true;
}
于 2013-05-16T23:58:02.293 に答える