开发映射定义里的动态脚本
# 概述
IDaaS支持将平台的属性和应用系统的属性做映射定义。本章节指导您使用javascript动态脚本作为映射类型进行映射配置,编写动态脚本时,利用脚本代码生成属性值,同时也可对该属性做一些显示条件。
# 前提条件
拥有IDaaS企业中心平台的管理员权限。
# 脚本代码规则
# 禁止使用Java class
若使用下面代码:
var File = Java.type('java.io.File'); File;
会抛出如下异常:
java.lang.ClassNotFoundException: java.io.File
# 限制使用CPU的时间
默认限制执行时间为1秒,超过时间将抛出异常。
若使用下面的代码:
do{}while(true);
会抛出下面的异常:
ScriptCPUAbuseException
# 限制内存的使用量
默认大小为10M,超过将抛出异常。
若使用下面的代码:
var o={},i=0; while (true) {o[i++] = 'abc'}
会抛出下面的异常:
ScriptMemoryAbuseException
# 限定脚本格式
为了方便重写脚本,脚本中的if、while、for语句必须使用大括号,否则将格式错误。
若使用下面的代码:
var o={},i=0; while (true) o[i++] = 'abc';
将抛出异常:
BracesException
# 限制使用部分函数
如下的函数不允许在代码中使用,如果在代码中出现了,没有任何效果。
print
echo
quit
exit
readFully
readLine
load
loadWithNewGlobal
2
3
4
5
6
7
8
# 脚本对象
映射脚本包含对象有user(用户)、organization(组织机构)、enterprise(企业对象)、account(应用账号)。
# user 对象
user对象中保存了当前用户的属性。包含属性定义中内置属性,自定义属性。
属性名 | 值类型 | 说明 |
---|---|---|
id | string | 用户 ID |
organizationId | string | 组织机构 ID |
userName | string | 用户名 |
name | string | 名称 |
firstName | string | 名字 |
middleName | string | 中间名 |
lastName | string | 姓氏 |
string | 邮箱 | |
mobile | string | 手机号 |
disabled | boolean | 禁用 |
guid | string | 用户 GUID |
employeeid | string | 员工号 |
attrGender | string | 性别 |
attrBirthday | Timestamp | 生日 |
attrNickName | string | 昵称 |
attrIdentityType | string | 身份类型 |
attrIdentityNumber | string | 身份证号码 |
attrArea | string | 地区 |
attrCity | string | 城市 |
attrManagerId | string | 经理 ID |
attrUserType | string | 用户类型 |
attrHireDate | Timestamp | 离职日期 |
attrWorkPlace | string | 工作地址 |
externalId | string | 外部系统ID |
employeeRelation | string | 雇佣关系 |
deactivationDate | Timestamp | 停用日期 |
disabledMode | string | 禁用方式 |
其他自定义属性 | string |
# organization 对象
organization对象中保存了机构的信息。
属性名 | 值类型 | 说明 |
---|---|---|
id | string | 组织机构 ID |
code | string | 代码 |
name | string | 名称 |
categoryId | string | 组织机构分类 ID |
parentId | string | 父组织机构 ID |
disabled | boolean | 禁用 |
displayPath | string | 组织机构路径 |
leaderId | string | 组织机构负责人ID |
# enterprise 对象
enterprise对象中保存了企业的基本信息。
属性名 | 值类型 | 说明 |
---|---|---|
id | string | 企业 ID |
tenantId | string | 远程企业 ID |
domain | string | 企业域名 |
name | string | 企业名称 |
logo | string | 企业LOGO |
# account 对象
account对象中保存了当前账号的属性。包含应用账户模型-属性定义中内置属性,自定义属性。
属性名 | 值类型 | 说明 |
---|---|---|
id | string | 账号 ID |
username | string | 账号名 |
name | string | 账号姓 |
attrManagerId | string | 直属上级 |
organizationId | string | 应用机构 ID |
disabled | boolean | 禁用 |
remoteId | string | 远程 ID |
roles | list | 角色列表 |
其他自定义属性 | string |
我们在使用脚本对象时,可以直接使用【对象】.【属性名】的方式获取。
例如:user.name、organization.code、account.username、enterprise.domain,对于扩展属性,此方法同样适用,例如用户存在扩展属性hobby(爱好),我们可以使用user.hobby来获取爱好。
# 操作步骤
此处以OIDC协议应用的认证映射配置为例进行说明,其他涉及属性映射配置的地方均可参考如下配置方法。
登录IDaaS企业中心平台,在上方导航栏选择 “资源 > 应用” ,选择应用。
进入应用详情,选择 “认证集成 > 映射配置” 。
单击 "添加映射" ,配置参数如下。
应用系统属性名:自定义应用系统属性名。
映射类型:选择动态脚本。
动态脚本内容:javascript脚本。
配置完成后保存,单击 “测试” 按钮,选择测试用户。
单击 “测试”,显示该属性对应的值。(示例脚本内容为,取用户名+邮箱后缀生成邮箱地址)
# 脚本样例
以下是一些简单的脚本样例,在实际的配置过程中可以参考如下写法。
# 示例一. 明天的当前时间
var date =new Date();
date.setDate(date.getDate()+1);
date.toISOString();
2
3
# 示例二. 用户扩展属性
首先,用户的属性定义中新增hobby(爱好)作为扩展属性。
user.hobby;
# 示例三. 用户的手机号码并隐藏中间4位
var mobile = user.mobile;
var result = "";
if(mobile.length==11){
result = mobile.slice(0,3)+"****"+mobile.slice(-4);
}
result;
2
3
4
5
6
# 示例四. 根据用户名生成用户的邮箱
var username = user.userName;
username.toLowerCase()+"@bamboocloud.com";
2