我已经实现了几个管理员用户角色,管理员可以在其中分配和删除角色。至于动态创建新角色还没有做到这一点。我相信尽管您可以通过提供的角色完成所需的一切
路线 您可以按照 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');
}
至于他们是否可以创建更新视图删除,我会使用 ACL 看看我的问题
保护实体的 ACL
使用 ACL,但据我所知,这意味着您需要在每条路由上进行更多检查
$authorizationChecker = $this->get('security.authorization_checker');
if(false == $authorizationChecker->isGranted('VIEW',$organisation) ){
throw new AccessDeniedException();
}