Caution: You are browsing the legacy symfony 1.x part of this website.
Cover of the book Symfony 5: The Fast Track

Symfony 5: The Fast Track is the best book to learn modern Symfony development, from zero to production. +300 pages showcasing Symfony with Docker, APIs, queues & async tasks, Webpack, SPAs, etc.

security.yml設定ファイル

1.2
Symfony version
1.4
Language

security.yml設定ファイルにsymfonyアプリケーション用の認証と認可を記述します。

tip

security.ymlファイルからのコンフィギュレーション情報はuserファクトリクラス(デフォルトはsfBasicSecurityUser)によって使われます。 認証と認可の施行はsecurityフィルターによって行われます。

アプリケーションが作成されるとき、symfonyはアプリケーションのconfig/ディレクトリにデフォルトのsecurity.ymlファイルを生成します。 ここにはアプリケーション全体のセキュリティを記述します(defaultキーの下):

default:
  is_secure: off

はじめの章で説明したように、security.ymlファイルはコンフィギュレーションカスケードのメカニズムが有効になり、定数を格納することができます。

アプリケーションのデフォルトコンフィギュレーションはモジュールのconfig/ディレクトリでsecurity.ymlファイルを作成することでオーバーライドできます。 メインキーはプレフィックスのexecuteを伴わないアクションの名前です(たとえばindexキーはexecuteIndexメソッドの設定)。

アクションがセキュアかどうかを判断するために、symfonyは次の順序で情報を探します:

  • 存在するのであればモジュール設定ファイルの固有のアクションのための設定;

  • 存在するのであればモジュール設定ファイルのモジュール全体のための設定(allキーの下);

  • アプリケーションのデフォルト設定(defaultキーの下)。

アクションにアクセスするために必要なクレデンシャルを決定するために同じ優先ルールが使われます。

note

security.yml設定ファイルはPHPファイルとしてキャッシュできます; 処理はsfSecurityConfigHandlerクラスによって自動的に管理されます。

認証

security.ymlのデフォルト設定は、それぞれのアプリケーションごとにインストールされ、だれでもアクセスを許可します:

default:
  is_secure: off

アプリケーションのsecurity.ymlファイルでis_secureキーをonにセットすることで、アプリケーション全体ですべてのユーザーの認証が必須になります。

note

認証されていないユーザーがセキュアなアクションにアクセスしようとすると、symfonyはリクエストをsettings.ymlで設定されたloginアクションに転送します。

モジュールの認証要件を修正するには、config/ディレクトリでsecurity.ymlを作成しallキーを定義します:

all:
  is_secure: on

モジュールの単独のアクションの認証要件を修正するには、モジュールのconfig/ディレクトリでsecurity.ymlファイルを作成し、アクションの名前の後にキーを定義します:

index:
  is_secure: off

tip

loginアクションをセキュアにすることはできません。 これは無限ループを避けるためです。

認可

ユーザーが認証されるとき、クレデンシャルを定義することで一部のアクションへのアクセスをさらに制限できます。 クレデンシャルが定義されたとき、ユーザーはアクションにアクセスする必須クレデンシャルを持たなければなりません:

all:
  is_secure:   on
  credentials: admin

symfonyのクレデンシャルのシステムはシンプルで強力です。 クレデンシャルはアプリケーションのセキュリティモデルを記述するために必要なものを表現できる文字列です(グループもしくはパーミッションのようなもの)。

credentialsキーは配列記法を使用することで複雑なクレデンシャル要件を記述するためのブール演算をサポートします。

ユーザーがクレデンシャルAかつクレデンシャルBを持たなければならない場合、角かっこでクレデンシャルを囲みます:

index:
  credentials: [A, B]

ユーザーがクレデンシャルAまたはクレデンシャルBを持たなければならないとき、2つのペアの角かっこでこれらを囲みます:

index:
  credentials: [[A, B]]

任意の数のクレデンシャルで任意の種類のブール式を記述するためにかっこを混ぜることもできます。