0

rolesメニューのレンダリング中にメニュー項目の権限をチェックするための新しいオプションをルーティング設定に追加しました。
対応するコントローラーを実行する前に、権限チェックのオプションを使用できれば素晴らしいと思います。

例:

some_route:
    path: /path/
    defaults:   { _controller: MyBundle:Controller:action }
    option:
        roles: [ROLE_MANAGER, ROLE_ADMIN]

コントローラー自体を実行する前に、ユーザーが役割に基づいてコントローラーにアクセスできるかどうかを確認する必要があります。
それはどのように可能ですか?何か案は?

更新
なぜrolesオプションが必要なのですか?
プロジェクトには4つの異なる役割と多くのルートがあります。一部のルートは保護されており、特定の役割を持つユーザーにのみ表示されます。
今のところ、すべての承認チェックはコントローラー内でdenyAccessUnlessGranted()メソッドによって実行されます。また、メニューの構築にはKnpMenuBundle
を 使用しています。また、メニューのレンダリング中に、現在ログインしているユーザーの各項目のアクセシビリティを確認する必要があります。ユーザーがアイテムへのアクセス権を持っていない場合、そのアイテムは除外され、ユーザーには表示されません。 ユーザーがアイテムにアクセスできるかどうかを確認するために、前述のオプションを追加しました。ここでは、ルートにアクセスできるロールを定義します。そして、このオプションは、チェックインとまったく同じロールを定義します
rolesdenyAccessUnlessGranted(). そして、私はすでにこれらの役割設定を持っているので、コントローラーの承認チェックに使用して冗長コードを削除しないのはなぜだと思います。

4

2 に答える 2

3

基本的には2通り

  1. Security.yml

    - { path: ^/path/$, roles: [ROLE_MANAGER, ROLE_ADMIN] }
    
  2. コントローラへの直接の注釈

    /**
     * @Security("has_role('ROLE_ADMIN') or has_role('ROLE_MANAGER')")
     */
    public function nameOfYourAction()
    

そうすれば、コントローラーのアクション実行前に行われる最初のアクションはセキュリティ チェックです。これが失敗すると、コントローラーは実行されません。

于 2015-11-10T08:07:17.043 に答える
1

これはあまり答えではないことはわかっていますが、あなたはそれを求めました。

kernel.controllerリスナーを追加し、そこで権限を確認します。

于 2015-11-10T18:50:39.563 に答える