Symfony2 - 检查用户是否具有身份验证角色

时间:2013-11-26 10:59:55

标签: security symfony authentication login

我找不到任何特别的东西;

当用户在前端登录时,我需要进行简单的检查,如果此用户具有例如角色:ROLE_CUSTOMER

我需要在身份验证过程中完成此操作,因为如果用户没有此角色,则必须返回错误。

Security.yml

    public:
        pattern:   ^/
        context:            site
        form_login:
            provider:       fos_userbundle
            csrf_provider:  form.csrf_provider   
            check_path:     site_login_check
            login_path:     site_login
            success_handler: authentication_handler
            failure_handler: authentication_handler                
        logout:
            path:           site_logout
            target:         site_login
        anonymous: true   

1 个答案:

答案 0 :(得分:7)

我认为在这种情况下你必须编写自己的用户提供程序,因为在FOSuserbundle中假设默认的ROLE是ROLE_USER,如果用户没有,它会自动将它与用户关联,并在用户之后启用FOS将用户视为有效登录。 或者您需要指定自己的login_check。

还有另外一种方法,基本上你假设FOSuser做登录和身份验证然后你可以创建一个服务,称之为successLoginHandler,用户“登录”后,你可以做自己的东西在那里检查这个角色。如果不存在,则发回拒绝访问权限的异常。

public function __construct($securityContext)
{
    $this->securityContext = $securityContext;
}

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
    if(!$this->securityContext->isGranted('ROLE_CUSTOMER')){
        throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
    }
}