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