什么时候应该在我的应用程序中使用ACL

时间:2010-07-02 09:29:53

标签: security permissions acl

我很困惑何时应该在我的应用程序中实现ACL(访问控制列表)系统虽然我可以通过获取会话组ID并限制组来轻松管理组的权限使用Auth组件进行访问。

ACL解决方案如何比我上面讨论的方法更好(根据组ID限制组访问)?

在管理应用程序中的访问权限时,如何实施ACL解决方案?

到目前为止,我已经了解到,通过ACL,可以在运行时授予和撤销权限,但是在不使用ACL的情况下也可以实现此功能。

我对此非常困惑,请帮助我理解这个概念,何时使用ACL以及在Web应用程序中使用ACL的好处。

我更喜欢用cakePHP v1.3进行编码,所以如果在cakephp的上下文中给出解释会很好,但是非常感谢与我的问题相关的任何帮助(语言/技术独立)。

2 个答案:

答案 0 :(得分:11)

如果您需要控制对动态变化的单个实体的访问权限,则必须使用ACL(或等效的用户权限机制,如文字数据库用户和权限表)而不是组。文件系统将ACL附加到单个文件,因为您不希望为每个文件创建单独的组。出于同样的原因,数据库管理器将ACL附加到数据库,表,视图,存储过程等等。 Web服务器以相同的方式处理Web应用程序。

在处理业务实体的业务应用程序中,您可能希望对对象等实体进行分区访问。公司内部的不同销售订单,客户,产品或部门,不允许每个人创建/更新甚至读取相同的实体。例如,当销售人员直接竞争奖金时,他们不希望其他人看到他们CRM存储的潜在客户的所有信息。

但是,通常,您希望将访问机制保持为尽可能粗糙的访问机制:组通常足够好。细粒度的访问控制机制具有复杂,昂贵,不准确和难以正确使用的趋势。他们甚至可能降低安全性,因为行政挫折鼓励人们找到聪明的解决方法......

答案 1 :(得分:1)

我认为用于证明用户访问资源的ACL技术仅适用于典型或中型应用程序。对于像CRM或财务数据仓库这样的大型应用程序,ACL将无法管理一组非常复杂的用户/资源对,当数据大小,类型和数量增加时,为此目的而制作的ACL表也会增加,使用ACL表重载数据库服务器没有任何意义。还有许多其他技术用于安装安全访问和权限和权限......使用ACL文件听起来并不坏但不是一个好主意,因为文件可能会不时损坏,因此数据故障超出风险无法访问包含ACL规则的文件或访问非现有文件或丢失的文件...使用权限的唯一方法是使用上下文中使用的业务表或用于应用程序的目的如果你在MVC架构或其他任何东西下,你的表和一些逻辑要添加到你的服务端脚本中......所以避免在非常大的应用程序中使用ACL。