1

假设我有User模型和Post模型。Post模型包含字段user_idUser已经$hasManyPostPost已经$belongsToUser

我有一些帖子编辑操作:

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 登录和发布编辑操作。甚至没有保存帖子数据的情况 - 假设帖子是私人的(只有所有者应该看到它) - 当有人调用 posts/edit/some_id 时,它会看到这篇帖子的编辑表单......

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

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

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

4

2 回答 2

3

蛋糕手册中提供了一个确切的示例(也可以方便地使用 Post/User 模型)

人人都是赢家!

于 2012-06-22T11:26:16.380 回答
1

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

但是正如您所说的一般的优雅,ACL 将是最好的:) 不过要小心,它们有一个陡峭的学习曲线。不要轻易放弃,这是值得的。

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

于 2012-06-22T11:48:12.060 回答