与symfony中的角色相关的问题

时间:2012-02-17 10:14:43

标签: symfony roles

我的项目有很多角色:管理员,人力资源,经理,员工。如何在Symfony2中以通用方式实现它,以便将来可以添加新角色?

1 个答案:

答案 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