1

对于设计为作为 SaaS 运行的应用程序,我认为这是一个非常基本的安全问题。下图表示实体之间的关系:

在此处输入图像描述

基本上,公司的用户创建了公司的每个其他用户都应该有权访问的项目。问题是如何在 Symfony2 中最好地解决这个问题。使用 ACL 似乎有点矫枉过正。

此外,我见过的大多数示例似乎都处理了控制器操作中的安全措施,这对我来说似乎很奇怪。我希望控制器与在内部处理安全性和权限的存储库进行交互。

对此的最佳做法是什么?

4

1 回答 1

0

在我看来,您的架构显示了解决方案。

我能想到的最简单的编码方案是:

My user is logged in
Get the user's company
Paginate all items attached to this company

您将没有 ACE 系统,但可以根据您的问题完成工作。

如果你想要一层额外的灵活性,我会在和UserGroup中间添加实体。将与through和相同的事情有关。该实体可以有一个额外的列,该列以 JSON 编码的字符串保存 ACE 数据,这样每当您获得该组时,您就可以直接访问该组的 ACE。CompanyUserItemItemCompanyUserGroupUserUserGroup

我对 ACL/ACE 的总体了解是,您必须花费适当的时间来规划您的集成,否则将变得非常难以维护。

要回答您的最后一个问题,ACL 没有任何最佳实践。Symfony2 有一个非常通用的 ACL 系统,它可能无法很好地扩展,但它可以满足大多数需求(如果不是全部)。我发现 Symfony2 ACL/ACE 系统很棒,但性能远非很好。

如果你有机会,你可以用缓存层包裹 Symfony ACL/ACE 系统,这将是理想的。但是,如果您的主机不允许您安装 Memcached 或 Redis 等解决方案,则您不能使用此解决方案。

于 2013-03-15T16:44:13.577 回答