我的项目有很多角色:管理员,人力资源,经理,员工。如何在Symfony2中以通用方式实现它,以便将来可以添加新角色?
答案 0 :(得分:2)
Symfony2代表使用UserInterface
界面的经过身份验证的用户。
此界面要求您实现getRoles
方法,该方法返回用户拥有的所有角色。
根据您实现此UserInterface的方式,您可以从数据库,Web服务或任何您想要的任何内容中获取这些角色。
提供这些用户的一种简单方法是in-memory
提供商:
# app/config/security.yml
security:
# ...
providers:
in_memory:
users:
ryan: { password: bb87a29949f3a1ee0559f8a57357487151281386, roles: 'ROLE_USER' }
admin: { password: 74913f5cd5f61ec0bcfdb775414c2fb3d161b620, roles: [ 'ROLE_ADMIN', 'ROLE_RH'] }
另一种方法是使用EntityProvider。有关详细信息,请查看此cookbook entry。
在最后一个示例中,用户角色静态存储在一个带编码的数组中,但它们可能来自另一个表,使用表关联。这就是FOSUserBundle中的完成方式。
您甚至可以定义角色层次结构:
# app/config/security.yml
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
因此任何具有角色ROLE_ADMIN的用户也继承了角色ROLE_USER。
有关详细信息,请查看the docs。