5

[问题]对于任何可以参与并提供想法的人来说,这实际上更像是一场头脑风暴。我想首先解释我想要做什么,我的一些想法,并希望能得到一些关于如何解决这个问题的好主意。

  1. [问题]我想为我的网站实施权限系统。该站点将有一个用户登录系统,允许管理员用户操作系统中所有其他用户的权限。该系统将拥有这些基本权限,例如查看、编辑、创建和删除,也许还有一些额外的权限。此外,这些权限将按用户角色分组。例如,创建、编辑、删除和查看权限将与系统中的经理角色相关联,但非经理角色将仅与权限“查看”相关联。

  2. [我一直在调查的内容] 我一直在研究的一个想法是使用访问控制列表。我可以创建一个界面,允许用户将权限关联到组,然后将这些组附加到系统中的用户。不过,我不确定使用 ACL 的实现是否准确。

  3. 在 symfony2 框架中实现此类系统的最佳方法是什么?

[更新] 如前所述,但我还需要一个允许我为角色动态创建权限并将其分配给用户的系统。此外,我需要一种简单的方法来检查系统中的这些权限,以增强控制器和模板渲染的行为方式。

**如果我的帖子有误或在错误的线程中,请向我提供正确的位置以发布此帖子

4

3 回答 3

0

您可以使用 Symfony 轻松实现上面提到的权限系统。为ROLE_MANAGER、ROLE_USER等用户创建不同的角色,并根据用户角色限制对特定路径的访问。例如,只有当用户具有 ROLE_MANAGER 时,才能访问 /admin/*。

Symfony 的文档详细介绍了所有这些概念。您可以通过单击此处访问文档。

于 2013-09-27T05:21:40.640 回答
0

只需使用 FOSUserBundle,它可以让您完全按照自己的意愿行事。

您将为用户和管理员创建角色。

于 2013-09-27T02:24:44.757 回答
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 看看我的问题

保护实体的 ACL

使用 ACL,但据我所知,这意味着您需要在每条路由上进行更多检查

$authorizationChecker = $this->get('security.authorization_checker');
  if(false == $authorizationChecker->isGranted('VIEW',$organisation) ){
    throw new AccessDeniedException();
  }
于 2016-10-10T19:29:45.127 回答