В виде TWIG моего проекта Symfony 5 у меня есть следующий фрагмент кода:
<table class="table table-hover table-striped datatable">
<thead>
<tr>
<th>ID</th>
<th>Username</th>
<th>Email</th>
<th>Created at</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td>{{ user.createdAt|date('d/m/Y H:i') }}</td>
</tr>
{% endfor %}
</tbody>
</table>
Ничего впечатляющего. Я хотел знать, есть ли способ проверить, имеет ли user
в моем l oop конкретную c роль, скажем, ROLE_STAFF
(Точнее, я хочу проверить это по иерархии. Если он имеет роль, которая «наследует» ROLE_STAFF
, она также должна удовлетворять условию). Я видел этот пост , но он довольно старый, и я надеюсь, что, возможно, что-то было реализовано с момента его написания.
Я пытался внедрить AccessDecisionManagerInterface
в моем User
сущность без какого-либо хорошего результата. Мой метод (после этого) не работает, потому что $this->decisionManager
является нулевым. Я предполагаю, что это не было введено должным образом. Я внедряю его с помощью конструктора:
public function __construct(AccessDecisionManagerInterface $decisionManager)
{
$this->decisionManager = $decisionManager;
}
public function hasRolePermissions(string $role)
{
$decisionManager = new AccessDecisionManager();
$token = new UsernamePasswordToken($this, '', '', $this->getRoles());
return $this->decisionManager->decide($token, [$role]);
}
Хотя решение, которое не использует isGranted
, такое как услуга или инъекция, для меня совершенно приемлемо, я бы предпочел сделать его простым. Я планировал создать функцию ветки, но я хотел бы знать, изобретаю ли я колесо заново или нет. Это кажется достаточно распространенной проблемой, поэтому я надеюсь, что есть некоторые встроенные функции, о которых я не знаю.