security.yml 設定ファイル

アプリケーションの認証 (authentication) と承認 (authorization) の要件は ~security.yml~ ファイルに記述します。

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

デフォルトでは、security.yml ファイルはアプリケーションの config/ ディレクトリに配置されています。アプリケーション全体のセキュリティ要件はこのファイルに記述します (default キーの下)。

[yml]
default:
  is_secure: false

コンフィギュレーションカスケードで述べたように、security.yml ファイルでは、コンフィギュレーションカスケードのメカニズムがはたらいており、定数を定義することができます。

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

アクションにアクセス制限がかけられているかどうかを判断するために、symfony は次の順序で情報を探します。

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

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

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

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

NOTE security.yml ファイルは PHP ファイルとしてキャッシュされます。処理は ~sfSecurityConfigHandler~ クラスにゆだねられます。

~認証~

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

[yml]
default:
  is_secure: false

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

NOTE アクセス制限がかけられたアクションに認証されていないユーザーがアクセスしようとすると、リクエストは settings.yml ファイルで指定されている login アクションに転送されます。

モジュールの認証要件を修正するには、 security.yml ファイルを config/ ディレクトリに配置し、all キーを定義します。

[yml]
all:
  is_secure: true

個別のアクションの認証要件を修正するには、security.yml ファイルをモジュールの config/ ディレクトリに配置し、アクションの名前の下側でキーを定義します。

[yml]
index:
  is_secure: false

TIP 無限ループに陥らないようにするため、login アクションにアクセス制限をかけられないようになっています。

~承認~

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

[yml]
all:
  is_secure:   true
  credentials: admin

symfony のクレデンシャルシステムはシンプルで強力です。クレデンシャルはアプリケーションのセキュリティモデルをあらわす文字列です (グループもしくはパーミッションのようなもの)。

複雑なクレデンシャル要件をわかりやすく示すことができるようにするために、credentials キーの設定のなかで配列記法を使ったブール演算がサポートされています。

ユーザーがクレデンシャル A かつクレデンシャル B をもっていなければならないことを示すには、これらのクレデンシャルを角かっこで囲みます。

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

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

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

任意の数のクレデンシャルによって任意の種類のブール式を示すために、複数のかっこを組み合わせることもできます。