Мне нужно проверить, есть ли у пользователя, вошедшего в систему, определенные роли в системе, поэтому я разрешаю или нет некоторые действия. Я использую JMSSecurityExtraBundle и проверяю документы на Авторизация на основе выражений но я делаю что-то не так, так как код не работает. Посмотрите на этот код:
use JMS\SecurityExtraBundle\Annotation\Secure;
use JMS\SecurityExtraBundle\Security\Authorization\Expression\Expression;
if ($this->get('security.context')->isGranted(array(new Expression('hasRole("ROLE_ADMIN")')))) {
echo "Enter";
} else {
echo "Do not enter";
}
Но каждый раз, когда я входил в систему, даже если у меня есть права и учетная запись ROLE_ADMIN, у меня есть только текст «Не вводить», что совершенно неверно. В примере кода, как объяснить в Вот автор использует $securityContext
вар, но откуда это? Где этот вар определяется? Я предполагаю, что это будет указывать на SecurityContext но я не совсем уверен, где проблема в моем коде? Как проверить, есть ли у пользователя определенная роль и, следовательно, разрешить ему выполнять некоторый код или нет?
Вам не нужно использовать выражения аннотаций, если вы просто хотите проверить роли пользователя в контроллере, этого достаточно:
if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
echo "Enter";
} else {
echo "Do not enter";
}
Один быстрый поиск в Google сразу же вернул бы вам раздел документации об этом: http://symfony.com/doc/current/book/security.html#access-control
Я разрешаю или нет некоторые действия.
Если вы имеете в виду регулярные действия в контроллерах, то удобное сочетание клавиш — использовать аннотацию @Security из SensioFrameworkExtraBundle
,
/**
* @Security("has_role('ROLE_ADMIN')")
*/
public function indexAction()
{
// ...
}
Но это не совсем то, как вы должны разрабатывать основанные на ролях действия в Symfony 2. Вы можете определить это в контроль доступа.
# app/config/security.yml
security:
# ...
access_control:
- { path: ^/admin/users, roles: ROLE_SUPER_ADMIN }
- { path: ^/admin, roles: ROLE_ADMIN }