isAuthorized()和使用CakePHP中的Acl组件有什么区别?

时间:2013-01-17 23:56:14

标签: php cakephp authorization cakephp-2.1

我还是蛋糕的新手。 假设您有一个具有group_id的表用户和一个名为groups的表 基团:

  • id role
  • 1管理员
  • 2老师
  • 3名学生

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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