5

[質問]これは、参加してアイデアを提供できる人なら誰でも参加できるブレインストーミングです。私が何をしようとしているのかを説明することから始めたいと思います.

  1. [問題点]ウェブサイトにパーミッション システムを実装したいと考えています。このサイトには、管理者ユーザーがシステム内の他のすべてのユーザーの権限を操作できるようにするユーザー ログイン システムがあります。システムには、表示、編集、作成、削除などの基本的な権限と、おそらくいくつかの追加権限があります。さらに、これらの権限はユーザーの役割によってグループ化されます。したがって、たとえば、作成、編集、削除、および表示の権限はシステム内の管理者の役割に関連付けられますが、管理者以外の役割は権限「表示」にのみ関連付けられます。

  2. 【調べたこと】ひとつ考えているのは、アクセス制御リストの利用です。ユーザーがアクセス許可をグループに関連付けて、それらのグループをシステム内のユーザーに関連付けることができるインターフェイスを作成できます。ただし、実装が ACL で正確に見えるかどうかはわかりません。

  3. このタイプのシステムを symfony2 フレームワークに実装する最良の方法は何ですか?

[更新] 前述のとおりですが、役割の権限を動的に作成してユーザーに割り当てることができるシステムも必要です。さらに、システム内のこれらのアクセス許可をチェックして、コントローラーとテンプレート レンダリングの動作を強化する簡単な方法が必要です。

**私の投稿が間違っているか、間違ったスレッドにある場合は、この投稿を行う正しい場所を教えてください

4

3 に答える 3

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');
}

update view delete を作成できるかどうかについては、ACL を使用します。私の質問を参照してください。

エンティティ エンティティを保護する ACL

私が見る限り、ACLを使用すると、すべてのルートでさらに多くのチェックを行う必要があることを意味します

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

FOSUserBundle を使用するだけで、必要なことを正確に行うことができます。

ユーザーと管理者の役割を作成します。

于 2013-09-27T02:24:44.757 に答える
0

上記のパーミッション システムは、Symfony で簡単に実装できます。ROLE_MANAGER、ROLE_USER などのユーザーのさまざまな役割を作成し、ユーザーの役割に基づいて特定のパスへのアクセスを制限します。たとえば、/admin/* は、ユーザーが ROLE_MANAGER を持っている場合にのみアクセスできます。

Symfony のドキュメントでは、これらすべての概念を詳細にカバーしています。ここをクリックすると、ドキュメントにアクセスできます。

于 2013-09-27T05:21:40.640 に答える