Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

ユーザーに基づいてWebアプリの動作をカスタマイズする

メモ

ユーザーに基づいて Web アプリの動作をカスタマイズする機能は、スタンドアロンの MATLAB® Web App Server™ 製品ではサポートされており、MATLAB Compiler™ に含まれる開発バージョンではサポートされていません。詳細については、MATLAB Web App Server の違いを参照してください。

前提条件

  • サーバー上で SSL を有効にします。詳細については、SSLを有効にするを参照してください。

  • サーバー上で認証を有効にします。詳細については、認証を参照してください。

userinfo.json ファイルの作成

ログインしているユーザーに基づいて、Web アプリの動作をカスタマイズできます。動作をカスタマイズするには:

  1. userinfo.json という名前のファイルを作成し、サーバーの webapps_private フォルダーに配置します。

    webapps_private フォルダは次の場所にあります:

    オペレーティング システムフォルダーの場所

    Windows®

    %ProgramData%\MathWorks\webapps\R2024a\config\webapps_private

    Linux®

    /local/MathWorks/webapps/R2024a/config/webapps_private

    macOS

    /Library/Application Support/MathWorks/webapps/R2024a/config/webapps_private

  2. MATLAB で App Designer を使用して Web アプリを作成するときに、アプリ コードで compiler.UserInfo (MATLAB Compiler) 関数を使用して、userinfo.json ファイルからユーザー固有の詳細を取得します。

userinfo.json の JSON スキーマは次のとおりです。

{
    "version": "<major>.<minor>.<patch>",
    "userInfo.doc": "Property values to be fetched during login from IdP",
    "userInfo": {
      "UserID": "<uid_or_upn>",
      "DisplayName": "<user_name_that_is_displayed>",
      "Groups": "<group_membership_of_user>",
      "<propertyName1>": "<value1>",
      "<propertyName2>": "<value2>",
      "<propertyName3>": "<value3>",
      ...      
    },
    "appAccess.doc": "Policy for allowing access to user properties within an app or group of apps",
    "appAccess": {
      "<appName>": ["<userInfo_propertyName>","<userInfo_propertyName>", ...],
      ...
      "*": "*"
    }
  }

  • バージョン:JSON スキーマのバージョンを指定します。R2024a のデフォルト値は 1.0.0 です。

  • userInfo.doc:userInfo ブロックの目的を説明するテキスト。

  • ユーザー情報:userInfo ブロックには、ユーザーの識別に役立つプロパティ名と値のリストが含まれています。プロパティ名 UserIDDisplayName、および Groups は、すべての userinfo.json ファイルに必要です。必要に応じて、他のプロパティ名と値を含めることができます。プロパティ名と値は、LDAP または OIDC 属性に対応します。たとえば、ユーザー情報の一部として電子メール アドレスを使用する場合は、プロパティ名として Email を指定し、プロパティ値として EmailAddress の属性値を指定できます。

  • ユーザーID:ユーザーの ID に対応する LDAP または OIDC 属性タイプをプロパティ値として指定します。UserID は必須のプロパティ名です。次に例を示します。

    "UserID": "uid"

    UserID プロパティ名にプロパティ値として属性タイプを指定しないと、ユーザーの詳細を照会する compiler.UserInfo (MATLAB Compiler) は、プロパティ値として <missing> を返します。

  • 表示名:ユーザーの優先名に対応する LDAP または OIDC 属性タイプを指定します。次に例を示します。

    "DisplayName": "displayName"
  • グループ:ユーザーが所属するグループに対応する LDAP または OIDC 属性タイプを指定します。次に例を示します。

    "Groups": "groups"

    メモ

    UserIDDisplayName、および Groups プロパティ名は、すべての userinfo.json ファイルに必要です。userInfo ブロックにカスタム プロパティ名を追加し、LDAP または OIDC 属性タイプに基づいてプロパティ値を割り当てることができます。たとえば、ユーザー情報の一部として電子メール アドレスを使用する場合は、プロパティ名として Email を指定し、プロパティ値として LDAP 属性タイプ EmailAddress (または OIDC を使用している場合は mail) を指定できます。

  • appAccess.doc:appAccess ブロックの目的を説明するテキスト。

  • アプリアクセス:appAccess ブロックには、サーバー上でホストされているアプリ名に対応するプロパティ名と、userInfo ブロックのプロパティ名に対応するプロパティ値のリストが含まれています。userInfo ブロックのプロパティ名の組み合わせを指定して一意のユーザー セットを識別することで、アプリへのアクセスを設定できます。

  • <appName>:アプリ名をプロパティ名として指定し、userInfo ブロックのプロパティ名の組み合わせをプロパティ値として指定して、アプリにアクセスできるユーザーのセットを一意に識別します。次に例を示します。

    "BloodPressure": ["UserID", "Email"]

ヒント

  • プロパティ名とプロパティ値の両方にアスタリスク (*) ワイルドカード文字を使用して、すべてのユーザーがすべてのアプリにアクセスできることを示すことができます。次に例を示します。

    "*": "*"

  • プロパティ名 WebAppsRole および WebAppsDisplayName は予約されており、userInfo ブロックでは使用できません。ただし、appAccess ブロックではプロパティ値として使用できます。次に例を示します。

     "Mystery": ["UserID", "Email", "WebAppsRole", "WebAppsDisplayName"]

    • WebAppsRole はユーザーの役割に対応します:著者ユーザー。詳細については、ロールベースのアクセスを参照してください。

    • WebAppsDisplayName は、アプリのホームページに表示される名前に対応します。

  • userInfo ブロックに変更を加えた場合は、サーバーを再起動する必要があります。詳細については、webapps-restartを参照してください。

userinfo.json ファイルと compiler.UserInfo 関数の使用例

次のサンプル userinfo.json ファイルでは、userInfo ブロックに必須のプロパティ名 UserIDDisplayName、および Groups が含まれています。さらに、LastNameEmail という 2 つのカスタム プロパティ名が含まれています。すべてのプロパティ名には、プロパティ値として OIDC 属性が割り当てられます。

appAccess ブロックには、BloodPressureMortgageMystery の 3 つのアプリが含まれています。

  • BloodPressure アプリへのアクセスは、userInfo ブロックの UserID および DisplayName プロパティに基づいて制限されます。

  • Mortgage アプリへのアクセスは、userInfo ブロックの UserID および LastName プロパティに基づいて制限されます。

  • Mystery アプリへのアクセスは、UserIDDisplayName、および予約済みプロパティ名 WebAppsRoleWebAppsDisplayName に基づいて制限されます。

{
    "version": "1.0.0",
    "userInfo.doc": "Property values to be fetched during login from IdP",
    "userInfo": {
      "UserID": "upn",
      "DisplayName": "displayName",
      "Groups": "groups",
      "LastName": "surname",
      "Email": "mail"
    },
    "appAccess.doc": "Policy for allowing access to user properties within an app or group of apps",
    "appAccess": {
      "BloodPressure": ["UserID","Email"],
      "Mortgage": ["UserID","LastName"],
      "Mystery": ["UserID","Email","WebAppsRole","WebAppsDisplayName"]
    }
  }

上記の userinfo.json ファイルの場合、BloodPressure アプリは次のようにアプリ コード内で compiler.UserInfo 関数を使用できます。

function startupFcn(app)
try
    user = compiler.UserInfo();
catch me
    error(me.message);
    return
end

if ~ismissing(user.UserID)
    % app code
    % Example:
    % app.userIDLabel.Text = [app.userIDLabel.Text user.UserID];
end
if isprop(user, 'Email')
    % app code
    % Example:
    % app.EmailLabel.Text = [app.EmailLabel.Text user.Email];
end
...

上記の userinfo.json ファイルの場合、Mystery アプリは次のようにアプリ コード内で compiler.UserInfo 関数を使用できます。

function startupFcn(app)
try
    user = compiler.UserInfo();
catch me
    error(me.message);
    return
end

if isprop(user, 'WebAppsDisplayName')
    % app code
    % Example:
    % app.DisplayNameLabel.Text = [app.DisplayNameLabel.Text user.WebAppsDisplayName];
end
if isprop(user, 'WebAppsRole')
    % app code
    % Example:
    % app.RoleLabel.Text = [app.RoleLabel.Text user.WebAppsRole];
end
...

参考

(MATLAB Compiler)