我只是想知道在Cake中是否有一种快速/有效的方法来执行此操作而不是自己编写代码逻辑(虽然这并不困难,但可能只是有点不干净)。
假设您有一个普通的users
表,然后是一个posts
表。每个用户都可以有多个帖子,user_id
posts
个id
链接到users
中的function edit($id = null) {
$this->Post->id = $id;
if (empty($this->data)) {
$this->data = $this->Post->read();
} else {
if ($this->Post->save($this->data)) {
$this->Session->setFlash('Your post has been updated.');
$this->redirect(array('action' => 'index'));
}
}
}
。
教程显示如何编辑记录:
user.id
有效地检查post.user_id
= $id
而不进行if检查,然后重定向的最佳方法是什么?我实际上想要“绑定”/“限制”页面,以便传递给edit()
的{{1}}就是这样,他们创建了这本书(或者,至少是当前的'所有者') posts
表。
更简洁的是,我的问题是:什么是蛋糕版:
$this->Post->read();
if ($this->Post->data['Post']['user_id'] != $my_current_user_id){
// Redirect
}
(伪代码,但我希望它能提出这个想法)。我已经浏览了文档,但我似乎无法看到这一点(对我而言,它只是'有意义'它存在,因为其余的库在他们用最少的工作为你做的事情是多么棒。)< / p>
答案 0 :(得分:0)
不是,不。您将始终必须明确地进行记录级访问检查,因为它们比Auth控制器方法权限更自由。即使使用非常自动化的ACL,您至少需要调用ACL访问检查。我经常这样做:
public function edit($id) {
$post = $this->Post->find('first', array('conditions' => array('Post.user_id' => $this->Auth->user('id'), 'Post.id' => $id));
if (!$post) {
$this->cakeError('error403');
}
if ($this->data) {
...
} else {
$this->data = $post;
}
}