【T8b】ASP.NET Core Identity の基礎(8/9)
プロジェクトタイプ | (注意: 本文参照) |
---|---|
プロジェクト名 | T8b |
ソリューション名 | PIT8 |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
8b-8. コントローラー/アクションごとのアクセス制御の方法
とりあえずログインとログアウトは可能になったが,いまのところログインしていようがいまいが 依然として全てのアクション/ビューにアクセスでき,かつ操作を行える状態である. アクセス制御を指定するためにはコントローラーのクラスや,アクションメソッドに [Authorize]属性や [AllowAnonymous]属性を指定する必要がある. これらを使ったアクセス制御の方法には以下の2通りの使い方がある.
- 【方法$\alpha$】コントローラー全体をユーザー認証必須にしたうえで,一部のアクションの匿名アクセスを許可する(_(1)).
- 【方法$\beta$】一部のアクションのみユーザー認証必須する(_(2)).
[Authorize]
属性はクラス(=コントローラー)にもメソッド(=アクション)にも指定することができるが,
クラスに指定した場合は,そのクラスに含まれているすべてのアクションメソッドがユーザー認証必須になる.
その場合でも個々のメソッドに[AllowAnonymous]
属性を指定することで,未認証の匿名ユーザーからのアクセスを許可することができる.
クラスに[Authorize]
属性を付けない場合は,それに含まれるすべてのメソッドは基本的に匿名ユーザーからのアクセスが可能なものとなる.
この場合でも個々のメソッドに[Authorize]
属性を付加すると,そのアクションメソッドはユーザー認証必須にすることができる.
これら二つの使い方の例を_に示す.ここではHoge
とPiyo
という名前のコントローラーがあり,
各々4つずつアクションメソッドを持っている.Hoge
コントローラー(_左)は【方法$\alpha$】で,
Piyo
コントローラー(_右)は【方法$\beta$】でアクセス制御を設定している.
|
|
|
|
この場合,認証済みのユーザーと未認証の匿名ユーザーがそれぞれどのアクションにアクセス可能になるかを _に示す.
コントローラー | アクション | 認証済みのユーザー | 匿名ユーザー | 備考 |
---|---|---|---|---|
Hoge | 【方法$\alpha$】クラスに[Authorize] 属性を付与 | |||
Eins | 〇 | × | 属性指定なし | |
Zwei | 〇 | × | 属性指定なし | |
Drei | 〇 | 〇 | [AllowAnonymous] 属性を付与 | |
Vier | 〇 | × | 属性指定なし | |
Piyo | 【方法$\beta$】クラスには属性指定なし. | |||
Funf | 〇 | 〇 | 属性指定なし | |
Sechs | 〇 | × | [Authorize] 属性を付与 | |
Sieben | 〇 | × | [Authorize] 属性を付与 | |
Acht | 〇 | × | [Authorize] 属性を付与 |
凡例:〇...アクセス可,×...アクセス不可
Hoge
コントローラーはクラス自体に[Authorize]
属性が付加されているため,基本的にどのアクションも
認証を済ませたユーザーからしかアクセスができない.ただしDrei
アクションには[AllowAnonymous]
属性が付加されているため
例外的にこのアクションのみ匿名アクセスが可能となっている.
Piyo
コントローラーはクラス自体には属性を指定していないため,基本的にどのアクションも匿名アクセスが可能である.
ただしアクションSechs
,Sieben
,Acht
には[Authorize]
属性が付加されているため,結局匿名アクセスが
可能なのはFunf
アクションのみとなっている.
今回のプロジェクトにはここまでの作業で,Home
コントローラー,Students
コントローラー,Departments
コントローラー,
Circles
コントローラー,Admin
コントローラーの5つのコントローラーが含まれている.これらがもつ各々のアクションのアクセスの可否は
_に示すように設定することにしよう.基本的に「新規作成」や「編集」,「削除」といったデータベースの状態に変更をもたらす
アクションは認証済みのユーザーしかアクセスできないようにする.なおここで例として扱っている「学生情報」は実際のシステムであれば個人情報に
相当する情報なので,本来ならば閲覧についても匿名アクセスを許すべきではない.しかし,ここでは練習のためこのようなアクセス制御を採用している
ということに留意していただきたい.
コントローラー | アクション | 認証済みのユーザー | 匿名ユーザー | 備考 |
---|---|---|---|---|
Home | Index | 〇 | 〇 | すべての匿名アクセス可(なので設定不要). |
Privacy | 〇 | 〇 | ||
Error | 〇 | 〇 | ||
Students | Index | 〇 | 〇 | Index とDetails のみ匿名アクセス許可. |
Create | 〇 | × | ||
Details | 〇 | 〇 | ||
Edit | 〇 | × | ||
Delete | 〇 | × | ||
EditCircleAffiliations | 〇 | × | ||
Departments | Index | 〇 | 〇 | すべての匿名アクセス可(なので設定不要). |
Details | 〇 | 〇 | ||
Circles | Index | 〇 | 〇 | Index とDetails のみ匿名アクセス許可. |
Create | 〇 | × | ||
Details | 〇 | 〇 | ||
Edit | 〇 | × | ||
Delete | 〇 | × | ||
Admin | Index | 〇 | 〇 | Index ,Login ,AccessDenied のみ匿名アクセス許可. |
Login | 〇 | 〇 | ||
Logout | 〇 | × | ||
AccessDenied | 〇 | 〇 |
凡例:〇...アクセス可,×...アクセス不可
Admin
コントローラーのLogin
アクションは匿名アクセスを許さないと誰もログインできなくなってしまうので,
匿名アクセスを許可する必要がある点に注意しよう.