2

我还是蛋糕的新手。假设你有一个表 users ,它有一个 group_id 和一个名为 groups 的表:

  • 身份角色
  • 1 名管理员
  • 2 老师
  • 3 学生

我想知道,例如,使用 isAuthorized 函数授权用户访问某个操作和使用 Acl 限制他的访问之间有什么区别?一种方法比另一种更安全吗?

另外,我想知道是否有任何“Cakish”方式,例如: - 允许管理员访问编辑操作 - 允许学生访问编辑操作,但限制他更改某个字段。

例如,假设一个学生正在编辑表用户,该表具有以下字段:用户名、密码、组 ID。他可以编辑密码,但不能编辑 group_id 和用户名。虽然管理员可以编辑两者。我实现这一点的方式是在控制器内部检查,在用户发布后,他的 group_id ,并根据他的权限取消设置字段 username 和 group_id 。这是实现这一点的正确方法吗?

谢谢你。

4

1 回答 1

1

ACL(或访问控制列表)是一种将谁有权访问什么的逻辑与您的代码分开的方法。使用 isAuthorized() 您必须为每种可能的访问类型手动添加代码。此外,ACL 允许(递归)分组和类似矩阵的访问(例如“允许访问所有战士,但不允许访问 Gremlin 种族的战士”);CakePHP 的文档非常丰富。

但是,我个人认为 Cake 的 ACL 缺少的是限制对特定项目的访问。例如,一个学生可以查看他的结果,但不能查看其他学生的结果;即他可以调用/results/view/10、/results/view/49 和/results/view/87,但不能调用其他。我无法使用 ACL 做到这一点。

至于编辑:显示/发布所有数据通常是个坏主意,然后删除您认为不必要的内容。有一天你一定会忘记一个字段,然后你就有了一个错误或漏洞。我建议使用安全组件来防止表单篡改,然后只将这些字段添加到用户可以编辑的表单中,具体取决于访问级别。

CakePHP 文档告诉您在控制器的 POST 操作中手动添加要保存的字段,但这意味着您必须在 2 个位置维护字段列表:在您的表单视图中和控制器中。根据访问级别添加代码以包含/排除字段,您会感到头疼。使用安全防篡改,用户无法手动添加字段来操作 POST 数据。

于 2013-01-18T03:35:00.963 回答