Symfony2中的公司/用户安全处理

时间:2013-03-15 14:24:32

标签: symfony

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

enter image description here

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

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

最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您的架构显示了解决方案。

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

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

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

如果您需要额外的灵活性,我会在UserGroupCompanyUser的中间添加Item实体。 ItemCompanyUserGroup相关,User也相同。 这个UserGroup实体可以有一个额外的列,用于保存JSON编码的字符串中的ACE数据,这样无论何时获得该组,您都可以直接访问该组的ACE。

我对ACL / ACE的一般了解是,您必须花费适当的时间来计划您的集成,否则将很难维护。

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

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