CakePHP:仅允许管理员编辑数据字段

3
在我的数据模型中,我有一个字段应该只能由管理员进行编辑。普通用户可以编辑模型中的记录并查看此特定字段,但他们不应该能够编辑它。是否有一种简单/清晰的方法来实现这一点?我猜需要创建额外的admin_edit控制器操作,但如何在控制器中“锁定”数据字段是最好的方式呢?
3个回答

2

并不需要创建一个新的控制器操作,但您可能决定这样做。请注意,您仍然可以使用相同的视图,只需使用$this->render("edit")即可查看:http://book.cakephp.org/view/428/render

我认为你应该:

  • 如果对用户和管理员来说不会混淆,请使用相同的控制器操作
  • 仅在用户是管理员时显示输入字段,并为其他用户输出文本
  • 在控制器中检查授权

1

根据您的设置,这可以轻松地作为模型中的验证方法来处理。在模型中编写自定义函数以检查用户是否具有权限。

您还可以在模型中使用beforeSave()来完成此操作。如果该字段存在但用户没有权限,则将其删除。


0

你可以在编辑视图中简单地检查管理员角色

if (hasRoleAdmin) {
 echo $this->Form->input(...);
}

这个实现起来很简单,但不安全。如果一个恶意用户提供了一个经过手动修改的HTTP POST请求,其中包含这个字段,他仍然可以编辑它。 - joni
我在谈论保存在会话中的角色。如果它们本身不安全,那么世界上没有一个网站是安全的。但我猜你指的是POST部分本身。一开始没注意到。当然,您始终需要确保用户不能“保存”比他们应该保存的更多的数据。但这必须在调用save()之前在控制器中完成。详情请参见:http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/ - mark
谢谢,那篇博客文章对我很有用。和母语为中文的人用英语交流感觉有些奇怪。 - joni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接