|
|
@ -5,12 +5,13 @@ |
|
|
|
Yii は二つの権限付与の方法を提供しています。すなわち、アクセス制御フィルタ (ACF) と、ロール・ベース・アクセス制御 (RBAC) です。 |
|
|
|
Yii は二つの権限付与の方法を提供しています。すなわち、アクセス制御フィルタ (ACF) と、ロール・ベース・アクセス制御 (RBAC) です。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
アクセス制御フィルタ (ACF) |
|
|
|
## アクセス制御フィルタ (ACF) <span id="access-control-filter"></span> |
|
|
|
-------------------------- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
アクセス制御フィルタ (ACF) は、[[yii\filters\AccessControl]] として実装される単純な権限付与の方法であり、何らかの単純なアクセス制御だけを必要とするアプリケーションで使うのに最も適したものです。 |
|
|
|
アクセス制御フィルタ (ACF) は、[[yii\filters\AccessControl]] として実装される単純な権限付与の方法であり、 |
|
|
|
|
|
|
|
何らかの単純なアクセス制御だけを必要とするアプリケーションで使うのに最も適したものです。 |
|
|
|
その名前が示すように、ACF は、コントローラまたはモジュールで使用することが出来るアクション [フィルタ](structure-filters.md) です。 |
|
|
|
その名前が示すように、ACF は、コントローラまたはモジュールで使用することが出来るアクション [フィルタ](structure-filters.md) です。 |
|
|
|
ACF は、ユーザがアクションの実行をリクエストしたときに、一連の [[yii\filters\AccessControl::rules|アクセス規則]] をチェックして、現在のユーザがそのアクションにアクセスする許可を持つかどうかを決定します。 |
|
|
|
ACF は、ユーザがアクションの実行をリクエストしたときに、一連の [[yii\filters\AccessControl::rules|アクセス規則]] をチェックして、 |
|
|
|
|
|
|
|
現在のユーザがそのアクションにアクセスする許可を持つかどうかを決定します。 |
|
|
|
|
|
|
|
|
|
|
|
下記のコードは、`site` コントローラで ACF を使う方法を示すものです。 |
|
|
|
下記のコードは、`site` コントローラで ACF を使う方法を示すものです。 |
|
|
|
|
|
|
|
|
|
|
@ -45,20 +46,20 @@ class SiteController extends Controller |
|
|
|
} |
|
|
|
} |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
上記のコードにおいて、ACF は `site` コントローラにビヘイビアとしてアタッチされています。 |
|
|
|
上記のコードにおいて、ACF は `site` コントローラにビヘイビアとしてアタッチされています。これがアクション・フィルタを使用する典型的な方法です。 |
|
|
|
これがアクション・フィルタを使用する典型的な方法です。 |
|
|
|
|
|
|
|
`only` オプションは、ACF が `login`、`logout`、`signup` のアクションにのみ適用されるべきであることを指定しています。 |
|
|
|
`only` オプションは、ACF が `login`、`logout`、`signup` のアクションにのみ適用されるべきであることを指定しています。 |
|
|
|
`site` コントローラの他の全てのアクションには ACF の影響は及びません。 |
|
|
|
`site` コントローラの他の全てのアクションには ACF の影響は及びません。 |
|
|
|
`rules` オプションは [[yii\filters\AccessRule|アクセス規則]] を指定するものであり、以下のように読むことが出来ます。 |
|
|
|
`rules` オプションは [[yii\filters\AccessRule|アクセス規則]] を指定するものであり、以下のように読むことが出来ます。 |
|
|
|
|
|
|
|
|
|
|
|
- 全てのゲスト・ユーザ (まだ認証されていないユーザ) に、'login' と 'singup' のアクションにアクセスすることを許可します。 |
|
|
|
- 全てのゲスト・ユーザ (まだ認証されていないユーザ) に、`login` と `singup` のアクションにアクセスすることを許可します。 |
|
|
|
`roles` オプションに疑問符 `?` が含まれていますが、これは「ゲスト」を表す特殊なトークンです。 |
|
|
|
`roles` オプションに疑問符 `?` が含まれていますが、これは「ゲスト」を表す特殊なトークンです。 |
|
|
|
- 認証されたユーザに、'logout' アクションにアクセスすることを許可します。 |
|
|
|
- 認証されたユーザに、`logout` アクションにアクセスすることを許可します。 |
|
|
|
`@` という文字はもう一つの特殊なトークンで、「認証されたユーザ」を表すものです。 |
|
|
|
`@` という文字はもう一つの特殊なトークンで、「認証されたユーザ」を表すものです。 |
|
|
|
|
|
|
|
|
|
|
|
ACF が権限のチェックを実行するときには、規則を一つずつ上から下へ、適用されるものを見つけるまで調べます。 |
|
|
|
ACF による権限付与のプロセスにおいては、現在の実行コンテキストに合致する規則が見つかるまで、 |
|
|
|
そして、適用される規則の `allow` の値が、ユーザが権限を有するか否かを判断するのに使われます。 |
|
|
|
アクセス規則が上から下へと一つずつ調べられます。 |
|
|
|
適用される規則が一つもなかった場合は、ユーザが権限をもたないことを意味し、ACF はアクションの継続を中止します。 |
|
|
|
そして、合致したアクセス規則の `allow` の値が、ユーザが権限を有するか否かを決定するのに使われます。 |
|
|
|
|
|
|
|
合致する規則が一つもなかった場合は、ユーザが権限をもたないことを意味し、ACF はアクションの継続を中止します。 |
|
|
|
|
|
|
|
|
|
|
|
ユーザが現在のアクションにアクセスする権限を持っていないと判定した場合は、デフォルトでは、ACF は以下の手段を取ります。 |
|
|
|
ユーザが現在のアクションにアクセスする権限を持っていないと判定した場合は、デフォルトでは、ACF は以下の手段を取ります。 |
|
|
|
|
|
|
|
|
|
|
@ -77,26 +78,21 @@ ACF が権限のチェックを実行するときには、規則を一つずつ |
|
|
|
] |
|
|
|
] |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
[[yii\filters\AccessRule|アクセス規則]] は多くのオプションをサポートしています。 |
|
|
|
[[yii\filters\AccessRule|アクセス規則]] は多くのオプションをサポートしています。以下はサポートされているオプションの要約です。 |
|
|
|
以下はサポートされているオプションの要約です。 |
|
|
|
|
|
|
|
[[yii\filters\AccessRule]] を拡張して、あなた自身のカスタマイズしたアクセス規則のクラスを作ることも出来ます。 |
|
|
|
[[yii\filters\AccessRule]] を拡張して、あなた自身のカスタマイズしたアクセス規則のクラスを作ることも出来ます。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::allow|allow]]: これが「許可」の規則であるか、「禁止」の規則であるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::allow|allow]]: これが「許可」の規則であるか、「禁止」の規則であるかを指定します。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::actions|actions]]: どのアクションにこの規則が適用されるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::actions|actions]]: どのアクションにこの規則が適用されるかを指定します。 |
|
|
|
これはアクション ID の配列でなければなりません。 |
|
|
|
これはアクション ID の配列でなければなりません。比較は大文字と小文字を区別します。 |
|
|
|
比較は大文字と小文字を区別します。 |
|
|
|
|
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのアクションに適用されることを意味します。 |
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのアクションに適用されることを意味します。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::controllers|controllers]]: どのコントローラにこの規則が適用されるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::controllers|controllers]]: どのコントローラにこの規則が適用されるかを指定します。これはコントローラ ID の配列でなければなりません。 |
|
|
|
これはコントローラ ID の配列でなければなりません。 |
|
|
|
コントローラがモジュールに属する場合は、モジュール ID をコントローラ ID の前に付けます。比較は大文字と小文字を区別します。 |
|
|
|
コントローラがモジュールに属する場合は、モジュール ID をコントローラ ID の前に付けます。 |
|
|
|
|
|
|
|
比較は大文字と小文字を区別します。 |
|
|
|
|
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのコントローラに適用されることを意味します。 |
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのコントローラに適用されることを意味します。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::roles|roles]]: どのユーザ・ロールにこの規則が適用されるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::roles|roles]]: どのユーザ・ロールにこの規則が適用されるかを指定します。 |
|
|
|
二つの特別なロールが認識されます。 |
|
|
|
二つの特別なロールが認識されます。これらは、[[yii\web\User::isGuest]] によって判断されます。 |
|
|
|
これらは、[[yii\web\User::isGuest]] によって判断されます。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- `?`: ゲスト・ユーザ (まだ認証されていないユーザ) を意味します。 |
|
|
|
- `?`: ゲスト・ユーザ (まだ認証されていないユーザ) を意味します。 |
|
|
|
- `@`: 認証されたユーザを意味します。 |
|
|
|
- `@`: 認証されたユーザを意味します。 |
|
|
@ -105,8 +101,7 @@ ACF が権限のチェックを実行するときには、規則を一つずつ |
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのロールに適用されることを意味します。 |
|
|
|
このオプションが空であるか指定されていない場合は、規則が全てのロールに適用されることを意味します。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::roleParams|roleParams]]: [[yii\web\User::can()]] に渡されるパラメータを指定します。 |
|
|
|
* [[yii\filters\AccessRule::roleParams|roleParams]]: [[yii\web\User::can()]] に渡されるパラメータを指定します。 |
|
|
|
パラメータがどのように使われるかは、RBAC 規則を説明する後のセクションを参照して下さい。 |
|
|
|
パラメータがどのように使われるかは、RBAC 規則を説明する後のセクションを参照して下さい。このオプションが空であるか設定されていない場合は、パラメータは渡されません。 |
|
|
|
このオプションが空であるか設定されていない場合は、パラメータは渡されません。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::ips|ips]]: どの [[yii\web\Request::userIP|クライアントの IP アドレス]] にこの規則が適用されるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::ips|ips]]: どの [[yii\web\Request::userIP|クライアントの IP アドレス]] にこの規則が適用されるかを指定します。 |
|
|
|
IP アドレスは、最後にワイルドカード `*` を含むことが出来て、同じプレフィクスを持つ IP アドレスに合致させることが出来ます。 |
|
|
|
IP アドレスは、最後にワイルドカード `*` を含むことが出来て、同じプレフィクスを持つ IP アドレスに合致させることが出来ます。 |
|
|
@ -116,9 +111,11 @@ IP アドレスは、最後にワイルドカード `*` を含むことが出来 |
|
|
|
* [[yii\filters\AccessRule::verbs|verbs]]: どのリクエスト・メソッド (HTTP 動詞、例えば `GET` や `POST`) にこの規則が適用されるかを指定します。 |
|
|
|
* [[yii\filters\AccessRule::verbs|verbs]]: どのリクエスト・メソッド (HTTP 動詞、例えば `GET` や `POST`) にこの規則が適用されるかを指定します。 |
|
|
|
比較は大文字と小文字を区別しません。 |
|
|
|
比較は大文字と小文字を区別しません。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::matchCallback|matchCallback]]: この規則が適用されるべきか否かを決定するために呼び出されるべき PHP コーラブルを指定します。 |
|
|
|
* [[yii\filters\AccessRule::matchCallback|matchCallback]]: この規則が適用されるべきか否かを決定するために呼び出されるべき |
|
|
|
|
|
|
|
PHP コーラブルを指定します。 |
|
|
|
|
|
|
|
|
|
|
|
* [[yii\filters\AccessRule::denyCallback|denyCallback]]: この規則がアクセスを禁止する場合に呼び出されるべき PHP コーラブルを指定します。 |
|
|
|
* [[yii\filters\AccessRule::denyCallback|denyCallback]]: この規則がアクセスを禁止する場合に呼び出されるべき |
|
|
|
|
|
|
|
PHP コーラブルを指定します。 |
|
|
|
|
|
|
|
|
|
|
|
下記は、`matchCallback` オプションを利用する方法を示す例です。 |
|
|
|
下記は、`matchCallback` オプションを利用する方法を示す例です。 |
|
|
|
このオプションによって、任意のアクセス制御ロジックを書くことが可能になります。 |
|
|
|
このオプションによって、任意のアクセス制御ロジックを書くことが可能になります。 |
|
|
|