13

管理パネルがあり、その役割を定義しましたROLE_ADMIN。私のsecurity.ymlファイルではパターンを使用している^/admin/*ので、/adminの下にあるすべてのものにが必要ROLE_ADMINです。アプリのフロントエンドで、ユーザーの役割を確認し、役割がROLE_ADMIN1つのファイルをレンダリングするかどうか、または別のファイルをレンダリングするかどうかを確認する必要があります。このURLは、security.ymlで定義されたパターンに該当しません。

では、ユーザーが管理者であるか、security.ymlで定義されたパターンに該当しないホームページ上の通常のユーザーであるかを確認するにはどうすればよいですか?

4

5 に答える 5

31

パターンを使用してアプリ全体でファイアウォールを有効にし、^/匿名アクセスを許可し、アクセスaccess_controlを制限するために使用します。

security:
    firewalls:
        secured_area:
            pattern: ^/
            anonymous: ~

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

@itsmequinnが提案したようisGranted()に、セキュリティコンテキストのメソッドを使用します。

if ($this->get('security.context')->isGranted('ROLE_BRAND')) {
    // the user has the ROLE_BRAND role, so act accordingly
}

Symfony 2.6では、security.context2つの別々のサービスに分割されています。security.authorization_checkerしたがって、問題を解決するにはサービスを使用する必要があります。

if ($this->get('security.authorization_checker')->isGranted('ROLE_BRAND')) {
    // the user has the ROLE_BRAND role, so act accordingly
}
于 2012-09-06T06:36:23.580 に答える
20

SecurityContextはで非推奨になりますSymfony 3.0

以前Symfony 2.6はを使用しますSecurityContext。を優先して
SecurityContext非推奨になります。 Symfony 3.0AuthorizationChecker

Symfony 2.6+Symfony 3.0使用のためにAuthorizationChecker


Symfony 2.5(およびそれ以下)

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
    # User is a ROLE_ADMIN
}

Symfony 2.6(およびそれ以降)

if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
    # User is a ROLE_ADMIN
}

同様の質問:ユーザーがコントローラー内のSymfony2にログインしているかどうかを確認するにはどうすればよいですか?

ここでドキュメントをもっと読む:AuthorizationChecker

于 2015-08-06T21:38:17.280 に答える
5

あなたはそのページの管理者にいますか?isGrantedその場合は、セキュリティコンテキストの方法を使用します:コントローラのアクセス制御

于 2012-09-05T18:54:25.003 に答える
1

これに対する最も簡単な解決策は注釈です。これの代わりに:

    if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
       # User is a ROLE_ADMIN
    }

..これを使用してみてください:

/**
 * ...
 * @Security("has_role('ROLE_ADMIN')")
 */

.. また :

/**
 * ...
 * @Security("is_granted('POST_ADD', post)")
 */
public function addAction(Post $post){...}

セキュリティアノテーションの詳細については、こちらをご覧ください。アノテーションはSymfony2のベストプラクティスです。こちらをご覧ください。お楽しみください!

于 2015-12-06T20:27:18.470 に答える
1

Symfony 4以降では、$ this-> get('security.authorization_checker')のようなサービスを使用する代わりに、以下のようなコードを使用する必要があります。

$hasAccess = $this->isGranted('ROLE_ADMIN');
$this->denyAccessUnlessGranted('ROLE_ADMIN');

symfonyのセキュリティ

于 2019-02-17T12:25:46.153 に答える