【发布时间】:2012-03-23 21:54:36
【问题描述】:
在我的 Symfony 2 应用程序中,我想使用标准的用户和角色授权系统 (http://symfony.com/doc/2.0/book/security.html)
我的用户是存储在具有原则的数据库中的实体(实现用户界面)。我的系统中将有 5 个预定义角色,每个用户可能有多个这些角色。
什么是最惯用的实现方式?我正在考虑以下三种解决方案。
-
创建一个单独的角色实体并与用户实体创建多对多关系
- 另外:轻松获得具有特定角色的所有用户
- Con:资源密集型? (始终需要双重联接才能获取用户的所有角色)
- 骗局:不是惯用语?角色的数量(及其名称)永远不会改变,那么将其作为单独的实体存储在数据库中是否有意义?
-
在用户中有一个字段,它是一个排序的、逗号分隔的角色列表,getRoles() 被实现为
explode(',',this.all_roles)- 另外:计算成本不高
- 缺点:很难让所有用户都拥有特定角色
- 缺点:像这样的数据库字段让小猫哭泣(规范化和其他东西)
-
每个角色的用户实体中有 5 个二进制字段
- 另外:计算成本不高
- 另外:轻松获得具有特定角色的所有用户
- 骗局:感觉还是不太好
实现这个系统最惯用的方法是什么?
【问题讨论】:
-
如何修复子列表项周围的间距?
-
选项 1 当然是安全的方法。如果您需要在您的角色(权限等)上挂起其他关系,那么您将全部设置好。选项 2 可能会工作得很好。也许使用带有位映射的整数来存储角色?稍微干净、可扩展和可查询。只是不要让小猫看到它。
-
你不能用FOSUserBundle这个吗?
标签: php symfony doctrine-orm authorization idioms