所要時間: 約 30 分
業務アプリに必須の認証・認可を段階的に組み込みます。
- 認証 = 誰かを特定する仕組み(ログイン)
- 認可 = 何ができるかを制御する仕組み(アクセス権)
Codeer.LowCode.Blazor では、認証はユーザーコード側で実装し、認可はデザイナで設定します。認証は Cookie 認証や Azure Entra ID 認証のテンプレートが用意されています。
- はじめてのモジュール作成 を完了している
- プロジェクトを Cookie 認証または Azure Entra ID 認証のテンプレートで作成している (Visual Studio の新規作成時に選択)
| ステップ | やること | 対象 |
|---|---|---|
| 1 | CurrentUserModule を作成 | ユーザー情報を保持するモジュール |
| 2 | app.clprj で CurrentUserModule を指定 | アプリ全体 |
| 3 | PageFrame に表示条件を設定 | 画面グループ単位 |
| 4 | Module にアクセス条件を設定 | モジュール単位 |
| 5 | データ単位のアクセス条件を設定 | 行単位 |
CurrentUserModule は、ログイン中のユーザーの情報を持つ特別なモジュールです。
通常は AppUser のようなテーブルに対応させます。
| Field | 役割 |
|---|---|
| Id(System Field) | ユーザーの一意キー |
| UserName(Text など) | 認証で使う ID |
| Rank など任意のカラム | 権限レベルの判定に使う |
Cookie 認証のテンプレートでは、UserName を ASP.NET Identity の User.Identity.Name と突き合わせて、該当ユーザーの行を特定します(ユーザーコード側の ControllerExtensions に実装済み)。
デザイナで app.clprj を開き、CurrentUserModule に Step 1 で作ったモジュールを指定します。
CurrentUserModule のさらに条件を設定することで、アプリ全体のアクセス可能ユーザーを絞れます。
例: Rank >= 1 のユーザーだけアプリにアクセスできる
→ 条件を満たさないユーザーは、ログイン後であってもどのページ・どのデータにもアクセスできません。
PageFrame ごとに表示条件を設定できます。
例: Rank >= 2 のユーザーだけ Main.frm を表示できる
これは画面グループ単位のアクセス制御です。管理者向け画面グループと一般ユーザー画面グループを分ける、といった使い方をします。
各 Module に以下 4 つの条件を設定できます。
| 条件 | 意味 |
|---|---|
| UserRead | このユーザーはデータを読めるか |
| UserWrite | このユーザーはデータを書き換えられるか |
| DataRead | このデータを(このユーザーは)読めるか |
| DataWrite | このデータを(このユーザーは)書き換えられるか |
UserReadが false のユーザー → このモジュールのデータにアクセスできない。サイドバーやヘッダのモジュールリストからも消えるUserWriteが false のユーザー → 読めるが、追加・編集・削除ができない
例:
UserRead: true
UserWrite: CurrentUser.Rank >= 3
→ 誰でも見られるが、Rank 3 以上しか編集できない
同じモジュールでも、行単位で閲覧・編集可否を制御できます。
一覧に表示されるデータが、条件を満たす行だけに絞られます。
例(同一組織のデータのみアクセス可能):
DataRead: CurrentUser.OrganizationId.Value == this.OrganizationId.Value
→ 他組織のデータは存在しないかのように扱われます。SelectField のプルダウンからも消えます。
条件を満たさない行は表示はできるが編集できない状態になります。
例(自分が作成したデータのみ編集可能):
DataWrite: CurrentUser.Id.Value == this.Creator.Value
認証そのものは ASP.NET の標準機能で、テンプレートが生成するユーザーコードに実装されています。 特別なカスタマイズが不要なら、テンプレートのまま使えます。
Cookie 認証のテンプレートには次のような実装が含まれます:
ModuleDataControllerに[Authorize, AutoValidateAntiforgeryToken]が付与されているControllerExtensions.GetCurrentUserIdAsyncでUser.Identity.NameからAppUser.Idを解決- ログイン・ログアウト用の
AccountController
→ 詳細: 認証・認可(リファレンス)
ユーザーコード側を書き換えることで、社内 SSO・JWT・OAuth2 など任意の認証方式に対応できます。Codeer.LowCode.Blazor が要求するのは「現在のユーザーの Id を返せること」だけです。
認証・認可の設定はデプロイ後にブラウザで次の順に確認します。
- ログアウト状態でアクセス → ログイン画面に飛ぶ
- 権限のないユーザーでログイン → アプリ自体に入れない、または一部画面だけ表示される
- 権限のあるユーザーでログイン → すべて見える・編集できる
- 他組織のデータが混在する状態 → 自分の組織のデータだけが出てくる
app.clprj の CurrentUserModule に該当ユーザーの行があるかを確認します。User.Identity.Name に対応する行がないと、どこにもアクセスできません。
その Module の UserRead 条件を満たしていない可能性があります。条件式を見直すか、デバッグ目的で UserRead: true に戻して挙動を確認します。
Module の DataRead を設定していないか、条件式が正しくないかです。this.{カラム}.Value == CurrentUser.{カラム}.Value の書き方を確認してください。
- 認証付きプロジェクトの始め方 — 認証付きテンプレートの選び方とサンプルの動かし方
- 認証・認可(リファレンス) — 詳細な設定項目
- PageFrame — 画面構成の設定
- app.clprj — アプリ全体の設定




