如何防止用户编辑别人的帖子

时间:2012-06-22 10:56:43

标签: cakephp cakephp-2.0 cakephp-2.1

假设我有User模型和Post模型。 Post模型包含字段user_idUser $hasMany Post Post $belongsTo User PostsController::edit($id) { if($this->request->isPost()) { $this->Post->id = $id; $this->Post->save(); } $post = $this->Post->read($id); $this->set(compact('post')); } AuthComponent {/ 1}}。{/ 1}

我有一些帖子编辑操作:

$this->Post->id = $id;
if($this->Post->readField('user_id') != $this->Auth->user('id')) 
{ //trigger error or redirect }

我使用{{1}}登录用户。

如何阻止用户编辑some1 else帖子?在功能/选项中是否有任何蛋糕构建?因为some1可以使用任何id登录和发布编辑动作。这甚至不是保存帖子数据的情况 - 让我们说帖子是私人的(只有主人应该看到它) - 当有人会调用帖子/编辑/ some_id时,它会看到这篇文章的编辑形式......

更简单的方法是在编辑操作开始时添加它:

{{1}}

但是我必须在每个更新/读取属于某个用户的数据的操作开始时添加它。所以我正在寻找更优雅的方式来做到这一点。

2 个答案:

答案 0 :(得分:3)

cake manual

中提供了一个确切的示例(也可以轻松使用帖子/用户模型)

每个人都是胜利者!

答案 1 :(得分:1)

好吧,没有办法避免添加一行来检查用户是否有权执行某项操作。即使您使用ACL(访问控制列表),这是Cake最强大的功能之一。

但是当你谈到一般的优雅时,ACL会成为美女的最佳状态:)尽管如此,他们的学习曲线非常陡峭。不要轻易放弃,这非常值得。

您应该会看到书籍http://book.cakephp.org/1.3/view/1543/Simple-Acl-controlled-Application

中的ACL