我正在创建一个包含用户的Symfony2网站,每个用户都可以拥有以下多个权限:
User1: manage users , manage sales , manage repository
User2: manage repository
user3: manage sales , manage repository
...
对于这样的系统,使用什么是正确的许可系统?
Roles
或ACLs
或voters
或其他?
由于
答案 0 :(得分:2)
如果您要授予“常规”权限,则角色可以。
例如,如果您需要用户能够管理所有或用户,则可以为其创建角色,例如ROLE_USER_MANAGER
。或者,如果您想授予他管理销售的权利,您可以授予他ROLE_SALES_MANAGER
角色。
基本上,如果有限数量的权限通常某些实体,请使用角色。
您可以将其用于其他内容,方法是授予包含实体名称和ID的角色,例如ROLE_MANAGER_REPOSITORY_23
,然后使用自定义选民,您可以知道具有该角色的用户可以管理存储库虽然这种方法可行,但我个人不喜欢它。
如果您有很多动态权限授予,特别是针对单个模型,那么ACL就是您的选择。 通常性能稍差,因为它需要从数据存储中获取更多数据,但更适合此目的。
使用Symfony2 ACL,授予和检查权限非常容易,甚至允许各个用户相互授予权限。
此外,Symfony ACL docs的介绍部分向您展示了这两种方法,并指出了每种方法的起伏。