2013-01-17 23 views
2

我仍然在蛋糕一个新手。 假设你有一个有GROUP_ID和一张桌子称为组 组一表的用户:isAuthorized()和CakePHP中使用Acl组件有什么区别?

  • ID角色
  • 1管理员
  • 2教师
  • 3学生

我米纳闷,是什么例如之间的差异,使用isAuthorized功能授权用户访问特定的动作,并使用ACL来限制他的访问之间?一种方法比另一种更安全吗?

另外,我想知道是否有任何“Cakish”的方式,例如: - 允许管理员访问编辑动作 - 允许学生访问编辑动作,而是从改变某一领域限制他。

例如,假设一个学生正在编辑它具有以下字段的表用户:用户名,密码,GROUP_ID。他可以编辑密码,但不能编辑group_id和用户名。而管理员可以同时编辑。我实现这个的方式是在控制器内部检查用户发布后的group_id,并根据他的权限取消设置字段用户名和group_id。这是否是一个适当的方式来实现这一点?

谢谢。

回答

1

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

但是,我个人发现在Cake的ACL中缺少的是限制访问特定的项目。例如,学生可以查看他的成绩,但不能看到其他学生;即他可以呼叫/ results/view/10,/ results/view/49和/ results/view/87而不是其他人。我无法通过ACL来做到这一点。

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

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

+0

感谢@JvO这是非常有帮助! – KEOKI

相关问题