假设我有User
模型和Post
模型。 Post
模型包含字段user_id
。
User
$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}}
但是我必须在每个更新/读取属于某个用户的数据的操作开始时添加它。所以我正在寻找更优雅的方式来做到这一点。
答案 0 :(得分:3)
每个人都是胜利者!
答案 1 :(得分:1)
好吧,没有办法避免添加一行来检查用户是否有权执行某项操作。即使您使用ACL(访问控制列表),这是Cake最强大的功能之一。
但是当你谈到一般的优雅时,ACL会成为美女的最佳状态:)尽管如此,他们的学习曲线非常陡峭。不要轻易放弃,这非常值得。
您应该会看到书籍http://book.cakephp.org/1.3/view/1543/Simple-Acl-controlled-Application
中的ACL