管理者が役割を割り当てたり削除したりできる管理者ユーザー役割をいくつか実装しました。動的な新しいロールの作成に関しては、それを行っていません。私はあなたが提供された役割で必要なすべてを行うことができると信じています
ルート Praveesh が提案したように、ルートを保護できます。ROLE_ADMINによってアクセスされるユーザーループを使用して管理ページからこれらのロールを割り当てることができ、小枝で次のようなものになります
<td>
{% if 'ROLE_NS' in user.roles %}
<form action="{{ path('admin_remove',{'id':user.id}) }}" method="post" name="overview">
<input type="hidden" name="role" value="ROLE_NS" />
<button type="submit" class="btn btn-danger btn-xs" value="demote">demote </button>
</form>
{% else %}
<form action="{{ path('admin_add',{'id':user.id}) }}" method="post" name="overview">
<input type="hidden" name="role" value="ROLE_NS" />
<button type="submit" class="btn btn-success btn-xs" value="demote">promote </button>
</form>
{% endif %}
</td>
<td>
{% if 'ROLE_ADMIN' in user.roles %}
<form action="{{ path('admin_remove',{'id':user.id}) }}" method="post" name="overview">
<input type="hidden" name="role" value="ROLE_ADMIN" />
<button type="submit" class="btn btn-danger btn-xs" value="demote">demote </button>
</form>
{% else %}
<form action="{{ path('admin_add',{'id':user.id}) }}" method="post" name="overview">
<input type="hidden" name="role" value="ROLE_ADMIN" />
<button type="submit" class="btn btn-success btn-xs" value="demote">promote </button>
</form>
{% endif %}
</td>
そして、次のようなコントローラー
/**
*@Route("/add/{id}", name="admin_add")
*@Method({"GET","POST"})
*/
public function addAction(Request $request, \AppBundle\Entity\User $user)
{
// var_dump($user);
$role = $request->request->get('role');
$em = $this->getDoctrine()->getManager();
$user->addRole($role);
$em->persist($user);
$em->flush();
return $this->redirectToRoute('admin');
}
/**
* @Route("/remove/{id}", name="admin_remove")
*
*/
public function removeAction(Request $request, \AppBundle\Entity\User $user)
{
$role = $request->request->get('role');
$em = $this->getDoctrine()->getManager();
$user->removeRole($role);
$em->persist($user);
$em->flush();
return $this->redirectToRoute('admin');
}
update view delete を作成できるかどうかについては、ACL を使用します。私の質問を参照してください。
エンティティ エンティティを保護する ACL
私が見る限り、ACLを使用すると、すべてのルートでさらに多くのチェックを行う必要があることを意味します
$authorizationChecker = $this->get('security.authorization_checker');
if(false == $authorizationChecker->isGranted('VIEW',$organisation) ){
throw new AccessDeniedException();
}