所要時間: 約 30 分
ログインは最初から入っているので、ここでは認可(ログインしたユーザーに何を見せ、何を書かせるか)をデザイナで段階的に設定します。
- 認証 = 誰かを特定する仕組み(ログイン)
- 認可 = 何ができるかを制御する仕組み(アクセス権)
Codeer.LowCode.Blazor では、認証はホストアプリ側 (テンプレートが生成するコードと MIT の Extras) で行い、認可はデザイナで設定します。認証は Cookie 認証のコードがテンプレートに含まれています (認証の全体像)。
- はじめてのモジュール作成 を完了している
- プロジェクトを Visual Studio テンプレート(
Codeer.LowCode.Blazor)で作成している (ログインは最初から含まれる。初期ユーザーは ログインとユーザーの初期設定 参照)
| ステップ | やること | 対象 |
|---|---|---|
| 1 | CurrentUserModule を作成 | ユーザー情報を保持するモジュール |
| 2 | app.clprj で CurrentUserModule を指定 | アプリ全体 |
| 3 | PageFrame に表示条件を設定 | 画面グループ単位 |
| 4 | Module にアクセス条件を設定 | モジュール単位 |
| 5 | データ単位のアクセス条件を設定 | 行単位 |
CurrentUserModule は、ログイン中のユーザーの情報を持つ特別なモジュールです。
通常は AppUser のようなテーブルに対応させます。
| Field | 役割 |
|---|---|
| Id(System Field) | ユーザーの一意キー |
| UserName(Text など) | 認証で使う ID |
| Rank など任意のカラム | 権限レベルの判定に使う |
Cookie 認証のテンプレートでは、ユーザーモジュールに置いた LoginAccountContractField (ログインアカウント契約) の LoginName が指すフィールドでログイン ID を照合し、該当ユーザーの行の Id を Cookie に載せます。
デザイナで 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
認証は Codeer.LowCode.Blazor 本体の機能ではなく、テンプレートが生成するホストのコードと MIT の Extras にあります。 特別なカスタマイズが不要なら、テンプレートのまま使えます。
Cookie 認証のテンプレートには次のような実装が含まれます:
ModuleDataControllerに[Authorize, AutoValidateAntiforgeryToken]が付与されているIAuthenticationContext.GetCurrentUserIdAsyncが Cookie からログイン中ユーザーの Id (ユーザーモジュールのId) を返す- ログイン・ログアウト・外部 IdP・二要素認証のエンドポイントを持つ
AccountControllerと、ログイン画面 (login.html) - ID/パスワード照合・外部 IdP・二要素認証の実装は Codeer.LowCode.Blazor.Extras (MIT)
→ 認証の詳細: 認証の全体像 (Extras) / 認可の詳細: 認証・認可の概要
Entra ID / Google / AWS Cognito / OpenID Connect は設定だけで足せます (外部ログイン)。それ以外の社内 SSO・JWT などもホスト側のコードを書き換えれば対応できます。Codeer.LowCode.Blazor が要求するのは「現在のユーザーの Id を返せること」だけです。
認可の設定はデプロイ後にブラウザで次の順に確認します。
- ログアウト状態でアクセス → ログイン画面に飛ぶ
- 権限のないユーザーでログイン → アプリ自体に入れない、または一部画面だけ表示される
- 権限のあるユーザーでログイン → すべて見える・編集できる
- 他組織のデータが混在する状態 → 自分の組織のデータだけが出てくる
app.clprj の CurrentUserModule に該当ユーザーの行があるかを確認します。ログインした ID(ログインアカウント契約の LoginName が指すフィールド)に対応する行がないと、どこにもアクセスできません。
その Module の UserRead 条件を満たしていない可能性があります。条件式を見直すか、デバッグ目的で UserRead: true に戻して挙動を確認します。
Module の DataRead を設定していないか、条件式が正しくないかです。this.{カラム}.Value == CurrentUser.{カラム}.Value の書き方を確認してください。
- ログインとユーザーの初期設定 — 初期ユーザーと標準パターン集のサンプルの動かし方
- 認証・認可の概要 — 認可の詳細な設定項目
- PageFrame — 画面構成の設定
- app.clprj — アプリ全体の設定




