根据用户自定义 Web App 行为
注意
独立 MATLAB® Web App Server™ 产品支持根据用户自定义 Web App 行为的功能,而 MATLAB Compiler™ 中包含的开发版本则不支持。有关详细信息,请参阅MATLAB Web App Server 差异。
前提条件
创建 userinfo.json
文件
您可以根据登录的用户自定义 Web App 的行为。自定义行为:
创建一个名为
userinfo.json
的文件并将其放在服务器上的webapps_private
文件夹中。webapps_private
文件夹位于:操作系统 文件夹位置 Windows®
%ProgramData%\MathWorks\webapps\R2024b\config\webapps_private
Linux®
/local/MathWorks/webapps/R2024b/config/webapps_private
macOS
/Library/Application Support/MathWorks/webapps/R2024b/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 架构的版本。R2024b 的默认值是
1.0.0
。userInfo.doc:描述
userInfo
模块的用途的文本。userInfo:
userInfo
模块包含有助于识别用户的属性名称和值的列表。每个userinfo.json
文件中都需要属性名称UserID
、DisplayName
和Groups
。可以根据需要包含其他属性名称和值。属性名称和值对应于 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"
注意
每个
userinfo.json
文件中都需要UserID
、DisplayName
和Groups
属性名称。您可以向userInfo
模块添加自定义属性名称,并根据 LDAP 或 OIDC 属性类型分配属性值。例如,如果您想使用电子邮件地址作为用户信息的一部分,则可以指定Email
作为属性名称,并指定 LDAP 属性类型EmailAddress
(如果使用 OIDC,则为mail
)作为属性值。appAccess.doc:描述
appAccess
模块的用途的文本。appAccess:
appAccess
模块包含与服务器上托管的 App 名称相对应的属性名称列表,以及与userInfo
模块中的属性名称相对应的属性值列表。您可以通过指定userInfo
模块中的属性名称组合来设置对 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
。
根据
userInfo
模块的UserID
和DisplayName
属性,对BloodPressure
App 的访问受到限制。根据
userInfo
模块的UserID
和LastName
属性,对Mortgage
App 的访问受到限制。根据
UserID
和DisplayName
以及保留属性名称WebAppsRole
和WebAppsDisplayName
限制对Mystery
App 的访问。
{
"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)