セキュリティ、ルーティング、サービス、検証で式を使用する方法


Symfony には強力な 式言語が付属していますコンポーネント。これにより、高度なカスタム ロジック # を構成に追加できます。

#Symfony フレームワークは、次の方法で式をうまく利用します:

セキュリティ: 式では複雑なアクセス制御が使用されます

##ROLE_ADMIN 以外のロールを受け入れる

isGranted## ####また。

オブジェクトを受け入れます:

use Symfony\Component\ExpressionLanguage\Expression;// ... public function indexAction(){
    $this->denyAccessUnlessGranted(new Expression(
        '"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())'
    ));     // ...}

この例では、現在のユーザーが ROLE_ADMIN または現在のユーザーの # を持っている場合、ユーザー オブジェクト ##isSuperAdmin()メソッドは true を返します。その後、アクセスが承認されます (注: ユーザー オブジェクトはisSuperAdmin メソッドはありません。このメソッドはこの例でのみ表示されます)。

#これは式を使用します。言語を表現するための構文について詳しくは、# を参照してください。 ##式の構文

式では、さまざまな変数にアクセスできます:

user
  • ユーザー オブジェクト (認証されていない場合は
  • anon)。 roles
  • ユーザーが所有するロールの配列 (
  • ## を含む) #ロール レベル (ロール レベル) ただし、IS_AUTHENTICATED_* は含まれません。属性 (以下の関数を参照)。 object
  • 2 番目のパラメータは
  • isGranted
  • # に渡されます##メソッドのオブジェクト (存在する場合)。 #トークントークン オブジェクト。
  • #trust_resolver
  • AuthenticationTrustResolverInterface
  • インターフェイス、そのオブジェクトは次のとおりです。おそらく、代わりに以下の
  • is_* 関数を使用したいと思われます。 さらに、式でさまざまな関数にアクセスできます。
    • is_authenticated
    • ユーザーが合格した場合、true を返します。 " 「Remember Me」または「Full」認証に合格した場合、たとえばユーザーがログインしている場合に true を返します。
    • is_anonymous
    • isGranted と同等です 関数で IS_AUTHENTICATED_ANONYMOUSLY を使用します。
    • is_remember_me
    • IS_AUTHENTICATED_REMEMBERED## と似ていますが、まったく同じではありません# ######、以下を参照してください。 is_ fully_authenticated
    • ##IS_AUTHENTICATED_FULLY と似ていますが、まったく同じではありません######、以下を参照してください。 has_role
    • ユーザーが指定された ROLE を持っているかどうかを確認します - 次のような式に相当します#ロール
    • # の「ROLE_ADMIN」。 is_remember_me はチェック
    # とは異なります

    ##IS_AUTHENTICATED_REMEMBERED#is_remember_me

    副詞句: is_authenticated_full

    関数と

    #isGranted 関数での使用 ##IS_AUTHENTICATED_REMEMBERED 副詞節: IS_AUTHENTICATED_FULLY は英語でも似ていますが、 # ではありません。 # 次の例と同じで、違いがわかります:

    use Symfony\Component\ExpressionLanguage\Expression;// ... $ac = $this->get('security.authorization_checker');$access1 = $ac->isGranted('IS_AUTHENTICATED_REMEMBERED'); $access2 = $ac->isGranted(new Expression(
        'is_remember_me() or is_fully_authenticated()'));

    ここでは、$access1#$access2の値は同じです。 IS_AUTHENTICATED_REMEMBERED および IS_AUTHENTICATED_FULLY の動作とは異なり、 is_remember_me関数ユーザーが remember_me を渡した場合のみCookie 認証中は true、is_full_authenticated Only ifユーザーがセッションサイクル ログインステータスが成功した場合にのみ true を返します (フルフェッジなど)。