[问题] 对于任何能够参与并提供想法的人来说,这实际上更像是一场头脑风暴。我想首先解释一下我想做什么,我的一些想法,并希望得到一些好的想法,如何解决这个问题。
[问题] 我想为我的网站实施权限系统。 该站点将具有允许管理员用户的用户登录系统 操纵系统中所有其他用户的权限。该 系统将具有视图,编辑,创建等基本权限 并删除,也许还有一些额外的。而且,这些 权限将按用户角色分组。所以,例如, 创建,编辑,删除和查看的权限将与之关联 系统中的经理角色,但非经理角色就是这样 与权限“视图”相关联。
[我一直在调查] 我一直在挖掘的一个想法 into是使用访问控制列表。我可以创建一个界面 这将允许用户将权限关联到组然后 将这些组附加到系统中的用户。我不确定 但实现将使用ACL查看。
实现此类系统的最佳方法是什么? symfony2框架?
[UPDATES] 如前所述,但我还需要一个允许我动态创建角色权限并将其分配给用户的系统。此外,我需要一种简单的方法来检查系统中的这些权限,以增加控制器和模板渲染的行为方式。
**如果我的帖子出错或者出错了,请提供正确的位置来发布此帖子
答案 0 :(得分:0)
只需使用FOSUserBundle即可让您完全按照自己的意愿行事。
您将为用户和管理员创建角色。
答案 1 :(得分:0)
您可以使用Symfony轻松实现上面提到的权限系统。 为用户创建不同的角色,例如ROLE_MANAGER,ROLE_USER,并根据用户角色限制对特定路径的访问。例如,只有用户拥有ROLE_MANAGER时才能访问/ admin / *。
Symfony的文档详细介绍了所有这些概念。您可以点击here。
访问该文档答案 2 :(得分:0)
我已经实施了几个管理员用户角色,管理员可以在其中分配和删除角色。至于动态创造新角色还没有做到这一点。我相信,虽然您可以完成所提供角色所需的一切
路线 您可以像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查看我的问题
ACLs protecting a entities entity
尽管我可以看到使用ACL,但这意味着您需要在每条路线上进行更多检查
$authorizationChecker = $this->get('security.authorization_checker');
if(false == $authorizationChecker->isGranted('VIEW',$organisation) ){
throw new AccessDeniedException();
}