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 id
as$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 id
のisAuthorized
コールバックでを定義していないためDocumentsController
、isOwnedBy
false を返しているということです。isAuthorized
内でプロファイル ID を取得する方法に関する提案はありますDocumentsController
か?
前もって感謝します!