アプリケーションの認証 (authentication) と承認 (authorization) の要件は security.yml
ファイルに記述します。
デフォルトでは、security.yml
ファイルはアプリケーションの config/
ディレクトリに配置されています。アプリケーション全体のセキュリティ要件はこのファイルに記述します (default
キーの下)。
default: is_secure: false
コンフィギュレーションカスケードで述べたように、security.yml
ファイルでは、コンフィギュレーションカスケードのメカニズムがはたらいており、定数を定義することができます。
アプリケーションのデフォルトコンフィギュレーションをオーバーライドするには、 security.yml
ファイルをモジュールの config/
ディレクトリに配置します。メインキーはアクションの名前で、プレフィックスの execute
はつけません (たとえば executeIndex
メソッドであれば index
)。
アクションにアクセス制限がかけられているかどうかを判断するために、symfony は次の順序で情報を探します。
モジュールの設定ファイルに存在しているのであれば、特定のアクションのコンフィギュレーション。
モジュールの設定ファイルに存在しているのであれば、モジュール全体のコンフィギュレーション (
all
キーの下)。アプリケーションのデフォルトコンフィギュレーション (
default
キーの下)。
アクションにアクセスする際に必要なクレデンシャルを決めるのに同じ優先ルールが適用されます。
note
security.yml
ファイルは PHP ファイルとしてキャッシュされます。処理は sfSecurityConfigHandler
クラスにゆだねられます。
認証
security.yml
ファイルのコンフィギュレーションはアプリケーションごとにインストールされ、デフォルトでは、すべてのユーザーのアクセスが許可されています。
default: is_secure: false
すべてのユーザーの認証をアプリケーション全体で必須にするには、アプリケーションの security.yml
ファイルにおいて、is_secure
キーに true
をセットします。
note
アクセス制限がかけられたアクションに認証されていないユーザーがアクセスしようとすると、リクエストは settings.yml
ファイルで指定されている login
アクションに転送されます。
モジュールの認証要件を修正するには、 security.yml
ファイルを config/
ディレクトリに配置し、all
キーを定義します。
all: is_secure: true
個別のアクションの認証要件を修正するには、security.yml
ファイルをモジュールの config/
ディレクトリに配置し、アクションの名前の下側でキーを定義します。
index: is_secure: false
tip
無限ループに陥らないようにするため、login アクションにアクセス制限をかけられないようになっています。
承認
クレデンシャルを定義することで、一部のアクションにアクセスできる認証済みユーザーを細かく指定できます。クレデンシャルが定義されている場合、ユーザーはアクションへのアクセスに必須のクレデンシャルをもっていなければなりません。
all: is_secure: true credentials: admin
symfony のクレデンシャルシステムはシンプルで強力です。クレデンシャルはアプリケーションのセキュリティモデルをあらわす文字列です (グループもしくはパーミッションのようなもの)。
複雑なクレデンシャル要件をわかりやすく示すことができるようにするために、credentials
キーの設定のなかで配列記法を使ったブール演算がサポートされています。
ユーザーがクレデンシャル A かつクレデンシャル B をもっていなければならないことを示すには、これらのクレデンシャルを角かっこで囲みます。
index: credentials: [A, B]
ユーザーがクレデンシャル A またはクレデンシャル B をもっていなければならないことを示すには、これらのクレデンシャルを2つのペアの角かっこで囲みます。
index: credentials: [[A, B]]
任意の数のクレデンシャルによって任意の種類のブール式を示すために、複数のかっこを組み合わせることもできます。
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.