Вместо проверки пользовательских разрешений на вашем контроллере вы можете создать пользовательскую проверку пользователей, которая может запретить аутентификацию на основе вашей пользовательской логики.
Пример проверки пользователя
namespace AppBundle\Security;
use AppBundle\Security\User as AppUser;
use Symfony\Component\Security\Core\User\UserCheckerInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class UserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user)
{
if (!$user instanceof AppUser) {
return;
}
if (!in_array('SOME_ROLE', $user->getRoles())) {
// throw an AccountStatusException exception here
}
}
}
Если вы также хотите выполнить проверку ролей пользователя после того, как пользователь вошел в систему (если его роли могут измениться во время сеанса), вы можете использовать метод checkPostAuth()
.
Вы также должны упомянуть использование своей пользовательской программы проверки пользователей в файле app/config/security.yml
.
security:
firewalls:
main:
pattern: ^/
user_checker: AppBundle\Security\UserChecker
Дополнительная информация здесь