根据用户自定义 Web App 行为
注意
独立 MATLAB® Web App Server™ 产品支持根据用户自定义 Web App 行为的功能,而 MATLAB Compiler™ 中包含的开发版本则不支持。有关详细信息,请参阅MATLAB Web App Server 差异。
前提条件
在服务器上启用 SSL。有关详细信息,请参阅在 MATLAB Web App Server 上启用 SSL。
在服务器上启用身份验证。有关详细信息,请参阅身份验证。
创建 userinfo.json 文件
您可以根据登录的用户自定义 Web App 的行为。自定义行为:
创建一个名为
userinfo.json的文件并将其放在服务器上的webapps_private文件夹中。webapps_private文件夹位于:操作系统 文件夹位置 Windows®
%ProgramData%\MathWorks\webapps\R2025b\config\webapps_privateLinux®
/local/MathWorks/webapps/R2025b/config/webapps_privatemacOS
/Library/Application Support/MathWorks/webapps/R2025b/config/webapps_private在使用 MATLAB 中的 App 设计工具创作 Web App 时,请使用 App 代码中的
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>", ...],
...
"*": "*"
}
}
version:指定 JSON 架构的版本。R2025b 的默认值是
1.0.0。userInfo.doc:描述
userInfo模块的用途的文本。userInfo:
userInfo模块包含有助于识别用户的属性名称和值的列表。每个UserID文件中都需要属性名称DisplayName、Groups和userinfo.json。可以根据需要包含其他属性名称和值。属性名称和值对应于 LDAP 或 OIDC 属性。例如,如果您想使用电子邮件地址作为用户信息的一部分,则可以指定Email作为属性名称,并指定EmailAddress的属性值作为属性值。UserID:指定与用户 ID 相对应的 LDAP 或 OIDC 属性类型作为属性值。
UserID是必需的属性名称。例如:"UserID": "uid"如果没有为
UserID属性名称指定属性类型作为属性值,则查询用户详细信息的compiler.UserInfo(MATLAB Compiler) 将返回<missing>作为属性值。DisplayName:指定与用户首选名称相对应的 LDAP 或 OIDC 属性类型。例如:
"DisplayName": "displayName"Groups:指定与用户所属组对应的 LDAP 或 OIDC 属性类型。例如:
"Groups": "groups"注意
每个
UserID文件中都需要DisplayName、Groups和userinfo.json属性名称。您可以向userInfo模块添加自定义属性名称,并根据 LDAP 或 OIDC 属性类型分配属性值。例如,如果您想使用电子邮件地址作为用户信息的一部分,则可以指定Email作为属性名称,并指定 LDAP 属性类型EmailAddress(如果使用 OIDC,则为mail)作为属性值。appAccess.doc:描述
appAccess模块的用途的文本。appAccess:
appAccess模块包含与服务器上托管的 App 名称相对应的属性名称列表,以及与userInfo模块中的属性名称相对应的属性值列表。在appAccess模块中指定 App 后,即可确定该 App 可访问哪些用户属性。<appName>:指定 App 名称作为属性名称,并将userInfo模块中的属性名称组合作为属性值,以此标识 App 内可访问的属性。例如:"BloodPressure": ["UserID", "Email"]
提示
您可以使用星号 (*) 通配符作为属性名称和属性值,以指示所有用户都可以访问所有 App。例如:
"*": "*"属性名称
WebAppsRole和WebAppsDisplayName是保留的,不能在userInfo模块中使用。但是,它们可以在appAccess模块中用作属性值。例如:"Mystery": ["UserID", "Email", "WebAppsRole", "WebAppsDisplayName"]WebAppsRole对应用户的角色:作者和用户。有关详细信息,请参阅基于角色的访问。WebAppsDisplayName对应 App 主页上显示的名称。
如果您在
userInfo模块中做了任何更改,则必须重新启动服务器。有关详细信息,请参阅webapps-restart。
使用 userinfo.json 文件和 compiler.UserInfo 函数的示例
在以下示例 userinfo.json 文件中,userInfo 模块包含所需的属性名称:UserID、DisplayName 和 Groups。此外,它包含两个自定义属性名称,LastName 和 Email。所有属性名称都被分配 OIDC 属性作为属性值。
appAccess 模块包含三个 App:BloodPressure、Mortgage 和 Mystery。
BloodPressureApp 可访问userInfo模块中的UserID和DisplayName属性.MortgageApp 可访问userInfo模块中的UserID和LastName属性.MysteryApp 可访问UserID和DisplayName属性,以及userInfo模块中预留的WebAppsRole和WebAppsDisplayName属性.
{
"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 App 可以在 App 代码中使用 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 App 可以在 App 代码中使用 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 ...
另请参阅
compiler.UserInfo (MATLAB Compiler)