Функция is_granted
Функция is_granted проверяет, обладает ли
текущий пользователь указанной ролью или
разрешением. Первым параметром передаётся
роль или атрибут доступа, вторым (необязательным)
- объект, к которому проверяется доступ.
Функция возвращает true, если доступ разрешён,
и false в противном случае.
Синтаксис
{% if is_granted(role, subject) %}
...
{% endif %}
Пример
Давайте проверим, имеет ли текущий пользователь роль
ROLE_ADMIN:
{% if is_granted('ROLE_ADMIN') %}
<p>hello admin</p>
{% else %}
<p>hello user</p>
{% endif %}
Результат выполнения кода для пользователя с ролью
ROLE_ADMIN:
<p>hello admin</p>
Пример
Давайте передадим вторым параметром объект
article, чтобы проверить доступ к конкретной статье:
{% if is_granted('EDIT', article) %}
<p>edit allowed</p>
{% else %}
<p>edit denied</p>
{% endif %}
Результат выполнения кода для пользователя, которому разрешено редактирование:
<p>edit allowed</p>
Пример
Давайте передадим объект из контроллера в шаблон
и проверим доступ к нему через is_granted.
Сначала создадим контроллер:
<?php
namespace App\Controller;
use App\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(Article $article): Response
{
return $this->render('article/show.html.twig', [
'article' => $article,
]);
}
}
?>
Теперь выведем результат проверки в шаблоне:
{% if is_granted('VIEW', article) %}
<p>{{ article.text }}</p>
{% else %}
<p>access denied</p>
{% endif %}
Результат выполнения кода для статьи с текстом
'article' и разрешённым просмотром:
<p>article</p>
Смотрите также
-
тег
if,
который выполняет ветку кода по условию -
функция
app.user,
которая возвращает текущего пользователя -
функция
app.current_route,
которая возвращает имя текущего маршрута -
функция
path,
которая генерирует URL по имени маршрута