|
|
|
@ -3,7 +3,7 @@
|
|
|
|
|
|
|
|
|
|
> Note|注意: この節はまだ執筆中です。 |
|
|
|
|
|
|
|
|
|
権限付与は、ユーザが何かをするのに十分な許可を得ているか否かを確認するプロセスです。 |
|
|
|
|
権限付与は、ユーザが何かをするのに十分な許可を有しているか否かを確認するプロセスです。 |
|
|
|
|
Yii は二つの権限付与の方法を提供しています。すなわち、アクセス制御フィルタ (ACF) と、ロールベースアクセス制御 (RBAC) です。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -47,7 +47,7 @@ class SiteController extends Controller
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
上記のコードにおいて、ACF は `site` コントローラにビヘイビアとしてアタッチされています。 |
|
|
|
|
これはアクションフィルタを使用する典型的な方法です。 |
|
|
|
|
これがアクションフィルタを使用する典型的な方法です。 |
|
|
|
|
`only` オプションは、ACF が `login`、`logout`、`signup` のアクションにのみ適用されるべきであることを指定しています。 |
|
|
|
|
`rules` オプションは [[yii\filters\AccessRule|アクセス規則]] を指定するものであり、以下のように読むことが出来ます。 |
|
|
|
|
|
|
|
|
@ -172,7 +172,7 @@ RBAC を使用することには、二つの作業が含まれます。
|
|
|
|
|
一つのロールを一人または複数のユーザに割り当てることが出来ます。 |
|
|
|
|
ユーザが特定の許可を有しているか否かをチェックするためには、その許可を含むロールがユーザに割り当てられているか否かをチェックすればよいのです。 |
|
|
|
|
|
|
|
|
|
各ロールまたは許可に関連付けられた *規則* が存在することがあり得ます。 |
|
|
|
|
各ロールまたは許可に関連付けられた *規則* が存在し得ます。 |
|
|
|
|
規則とは、アクセスチェックの際に、対応するロールや許可が現在のユーザに適用されるか否かを決定するために実行されるコード断片のことです。 |
|
|
|
|
例えば、「記事更新」の許可は、現在のユーザが記事の作成者であるかどうかをチェックする規則を持つことが出来ます。 |
|
|
|
|
そして、アクセスチェックのときに、ユーザが記事の作成者でない場合は、彼/彼女は「記事更新」の許可を持っていないと見なすことが出来ます。 |
|
|
|
@ -293,7 +293,7 @@ class RbacController extends Controller
|
|
|
|
|
$auth->addChild($admin, $author); |
|
|
|
|
|
|
|
|
|
// ロールをユーザに割り当てる。1 と 2 は IdentityInterface::getId() によって返される ID |
|
|
|
|
// 通常はユーザモデルの中で実装する |
|
|
|
|
// IdentityInterface::getId() は、通常は User モデルの中で実装される |
|
|
|
|
$auth->assign($author, 2); |
|
|
|
|
$auth->assign($admin, 1); |
|
|
|
|
} |
|
|
|
@ -306,7 +306,7 @@ class RbacController extends Controller
|
|
|
|
|
|
|
|
|
|
投稿者 (author) は記事を投稿することが出来、管理者 (admin) は記事を更新することに加えて投稿者が出来る全てのことが出来ます。 |
|
|
|
|
|
|
|
|
|
あなたのアプリケーションがユーザ登録を許している場合は、新しく登録されたユーザに一度ロールを割り当てる必要があります。 |
|
|
|
|
あなたのアプリケーションがユーザ自身によるユーザ登録を許している場合は、新しく登録されたユーザに一度はロールを割り当てる必要があります。 |
|
|
|
|
例えば、アドバンストアプリケーションテンプレートにおいては、登録したユーザの全てを「投稿者」にするために、`frontend\models\SignupForm::signup()` を次のように修正しなければなりません。 |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
@ -339,7 +339,7 @@ public function signup()
|
|
|
|
|
|
|
|
|
|
既に述べたように、規則がロールと許可に制約を追加します。 |
|
|
|
|
規則は [[yii\rbac\Rule]] を拡張したクラスであり、[[yii\rbac\Rule::execute()|execute()]] メソッドを実装しなければなりません。 |
|
|
|
|
前に作った権限階層においては、投稿者は自分自身の記事を編集することが出来ないものでした。これを修正しましょう。 |
|
|
|
|
前に作った権限階層においては、投稿者は自分自身の記事を編集することが出来ませんでした。これを修正しましょう。 |
|
|
|
|
最初に、ユーザが記事の投稿者であることを確認する規則が必要です。 |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
@ -512,4 +512,4 @@ return [
|
|
|
|
|
|
|
|
|
|
このようにすると、アクセスチェックを実行すると、`admin` と `author` の両方のロールは、それらと関連付けられた規則を評価することによってチェックされるようになります。 |
|
|
|
|
規則が true を返せば、そのロールが現在のユーザに適用されることになります。 |
|
|
|
|
上述の規則の実装に基づいて言えば、ユーザの `group` の値が 1 であれば、`admin` ロールがユーザに適用され、`group` の値が 2 であれば `author` ロールが適用されるということを意味します。 |
|
|
|
|
上述の規則の実装に基づいて言えば、ユーザの `group` の値が 1 であれば `admin` ロールがユーザに適用され、`group` の値が 2 であれば `author` ロールが適用されるということを意味します。 |
|
|
|
|