我正在使用Symfony FOS userBundle,除了1件事以外,一切正常。
我想在用户登录时检查用户是否具有某个角色。如果不是这样,登录必须失败。有没有办法做到这一点?我搜索了一半的互联网,但无法找到解决方案。
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_PARENT: ROLE_USER
ROLE_ADMIN: ROLE_PARENT
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
mijn:
pattern: ^/
host: mijn.site
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#csrf_token_generator: security.csrf.token_manager
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { host: mijn.site, path: ^/gegevens, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { host: mijn.site, path: ^/, roles: ROLE_PARENT }
&#13;
因此,只有用户拥有ROLE_PARENT时才能成功登录。如果ROLE_ADMIN或ROLE_SUPERADMIN没有ROLE_PARENT,它必须失败。
答案 0 :(得分:1)
我不认为FOSUserBundle提供任何东西,你不需要。
您可以使用Custom User Checkers
。这是doc,详细解释了它。在集成UserChecker
课程后,您可以使用自定义消息限制某人使用checkPreAuth
方法登录。
一个小代码片段:
public function checkPreAuth(UserInterface $user)
{
if (!in_array('ROLE_PARENT', $user->getRoles()) {
$ex = new DisabledException('Only Parent Users are allowed to login!');
$ex->setUser($user);
throw $ex;
}
}
适用于我的几个项目。 希望它有所帮助!
答案 1 :(得分:0)
Thanx很多,这很有用!
记住:
此
您需要为防火墙中的所有安全区域定义user_checker