我找不到任何特别的东西;
当用户在前端登录时,我需要进行简单的检查,如果此用户具有例如角色: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
答案 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;
}
}