2012-06-22 61 views
1

比方说,我有User模型和Post模型。 Post模型包含字段user_idUser$hasMany on Post and Post has $belongsTo on 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登录的用户。

我该如何防止用户编辑别人的帖子?功能/选项中是否有任何蛋糕构建?因为some1可以使用任何ID登录并发布编辑操作。它甚至没有保存发布数据的情况 - 假设发布是私人的(只有所有者应该看到它) - 当有人打电话发布/编辑/ some_id时,它会看到这篇文章的编辑窗体...

更容易的方法是只在编辑行动开始补充一点:

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

但我将不得不在这个更新/读取属于某个用户的任何数据的每个动作的开头添加这一点。所以我正在寻找更优雅的方式来做到这一点。

回答

1

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

但是,正如你所说的优雅一般,ACL将是最好的美丽:)虽然小心,他们有一个陡峭的学习曲线。不要放弃容易,它很值得。

你应该看到的ACL从书http://book.cakephp.org/1.3/view/1543/Simple-Acl-controlled-Application

+0

其实,有避免添加一行的一种方式,这或许可以通过编辑操作在一个地方比较用户ID来解决,比如'的AppController :: isAuthorized()'或'beforeFilter()'。 –

3

好一个确切的例子(得心应手使用邮政/用户模型太)在cake manual

每个人的可用赢家!

相关问题