SystemUserサインイン

Power Portals Proは、デフォルトのcontact支援ユーザーとともに、サインインしたDataverseのsystemuser記録をポータルユーザーとして認識します。設定は不要です。ユーザーがMicrosoft認証でサインインすると、ポータルはまず対応するsystemuserを探します。存在すればセッションはそのsystemUserとして実行され、Dataverseは偽装によってセキュリティを強制します。一致するシステムユーザーが見つからなければ、サインインは接触経路に戻されます。同じポータルは、Dataverseライセンスを持つ社内のスタッフと外部の顧客連絡先の両方に同時に対応可能です。

これが重要な時

システムユーザー支援フローは、以下のような場合に有用です。

Microsoft認証のみ

Microsoft/Entra IDの外部プロバイダーのみがsystemuserに呼び込めます。ユーザーは systemuser.azureactivedirectoryobjectid 、すなわちプロバイダーがサインイン時に主張するオブジェクトID(報告されたアドレスではなく)とマッチングされ、SystemUserが報告するアドレスは一切表示されません。 isdisabled = true を持つsystemuserはブロックされます。ローカルのユーザー名/パスワードおよび他の外部プロバイダー(Googleなど)は常に連絡先としてサインインします。

仕組み

Microsoftのサインイン時に、ポータルは以下の通りです:

  1. 認証済みAzure ADオブジェクトIDを systemuser.azureactivedirectoryobjectidと照合します。アクティブなレコードが一致すれば、セッションはそのsystemuserにバインドされます。内部ユーザーにメールアドレスの確認を求めることはありません。オブジェクトIDはプロバイダー自身の主張であり、 systemuser レコードには確認を記録する場所がありません。
  2. そうでなければ、外部ログインを adx_externalidentity経由で一致させるコンタクトバックフローに戻ります。
  3. systemuserセッションでは、 ServiceClient.CallerId が systemuserid に設定され、すべてのDataverse呼び出しがサインイン済みユーザーとして実行されます — そのセキュリティロール、事業ユニットのスコープ、行レベルのアクセス権が適用されます。ポータル側の操作や列はリクエスト ITablePermissionProvider バイパスされます。クエリフィルターはDataverseクエリ自体を形作るため、引き続き実行されます。
  4. グリッド、フォーム、ボタンはユーザーの実際のDataverse権限を反映しており、 RetrieveUserPrivilegesRequest から計算され、ユーザーごとにキャッシュされています。接触セッションはこれまでと同様に登録されたハンドラーを経由して流れ続けます。

セキュリティモデル

システムユーザー支援セッションの場合、 CallerId なりすましはDataverseに強制を委ねるため:

管理者:連絡先としてテスト

ポータル管理者は通常、コンタクト側の体験を確認する必要があります — ログインした顧客に対してホームページが正しく表示されるか?このケースは正しくツールバーボタンを隠していますか?— 管理作業を行う能力を失うことなく。Power Portals Proはこれを直接サポートしています。管理者はMicrosoftのサインインを1つのMicrosoftサインインを systemuser (内部アカウント)と contact (テストレコード、または自分の顧客側のレコード)の両方にリンクさせ、サインアウトせずに両者を切り替えることができます。

混合オーディエンス:データ設計をそれに応じて行う

単一のポータルで、システムユーザーと連絡先の両方のユーザーを同一展開でサポートできます。カスタマイズにFetchXMLフィルター( adx_contactid == currentUserId ごとに行をスコープするフィルターが含まれている場合(これは接触専用ポータルでよく見られるパターン)、サインインしているユーザーがsystemuserの場合、そのフィルターは意味をなさなくなります。ユーザータイプにカスタマイズコードを分岐させて、各オーディエンスがそのデータを見るようにしましょう。

特権キャッシュ

環境全体の特権メタデータマップは、アプリケーション起動時に一度読み込まれ、無期限にキャッシュされます。アプリケーションを再起動(または IPrivilegeMetadataCache.InvalidateAsync呼び出す)ことで、新しいテーブルや権限スキーマの変更を取り入れてください。サインインした各システムの実効権限は24時間キャッシュされ、1 IUserPrivilegeCache.InvalidateAsync(userId)で追放可能です。