security.yml 設定ファイル

~security.yml~ 設定ファイルでは、symfony アプリケーションの認証 (authentication) と承認 (authorization) を記述します。

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

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

---
default:
  is_secure: off

設定ファイルの原則の章で説明したように、security.yml ファイルでは、コンフィギュレーションカスケードのメカニズムがはたらき、定数を定義することができます。

アプリケーションのデフォルトコンフィギュレーションをオーバーライドするには、モジュールの config/ ディレクトリのなかで security.yml ファイルを作ります。メインキーはアクションの名前で、プレフィックスの execute はつけません (たとえば executeIndex メソッドであれば index)。

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

  • 存在しているのであれば、モジュール設定ファイルでの特定のアクションのコンフィギュレーション;

  • 存在しているのであれば、モジュール設定ファイルでのモジュール全体のコンフィギュレーション (all キーの下);

  • アプリケーションのデフォルトコンフィギュレーション (default キーの下)。

アクションにアクセスする際に必要なクレデンシャルを決めるのに同じ優先ルールが適用されます。

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

~認証~

security.yml のコンフィギュレーションはアプリケーションごとにインストールされ、デフォルトでは、すべてのユーザーのアクセスが許可されます:

---
default:
  is_secure: false

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

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

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

---
all:
  is_secure: true

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

---
index:
  is_secure: false

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

~承認~

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

---
all:
  is_secure:   true
  credentials: admin

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

複雑なクレデンシャル要件を記述できるようにするために、credentials キーは配列記法を使ったブール演算をサポートします。

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

---
index:
  credentials: [A, B]

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

---
index:
  credentials: [[A, B]]

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