更新时间:2024-12-27 GMT+08:00

如何开发映射脚本

OneAccess支持将企业的组织与用户属性映射至应用系统。可通过映射脚本自动生成应用的属性值,同时,可限制映射至应用的属性值。

下面将为您介绍如何开发映射定义的脚本。

代码规则

在编写映射脚本时,OneAccess对脚本做了一些限制。包括禁止使用Java class、限制使用CPU的时间、限制内存的使用量、限定脚本格式、限制使用部分函数。

  • 禁止使用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

脚本示例

  • 用户属性

    在脚本中可以使用用户(user)这个对象,这个对象中包含了用户的所有属性,具体的属性以属性定义中的属性代码为准。用户属性定义可参考用户属性定义,账号属性定义可参考9

    • 示例1:映射用户注册时间:
      var createdAt = user.createdAt; 
      var date =new Date(createdAt); 
      date.toISOString();
    • 示例2:映射用户的手机号,并隐藏中间4位:
      var mobile = user.mobile;
      var result = "";
      if(mobile.length == 15) {
        result = mobile.slice(0,7) + "****" + mobile.slice(-4);
      }
      result;
    • 示例3:根据用户名生成用户邮箱:
      var username = user.userName; 
      username.toLowerCase()+"@huaweicloud.com";
  • 组织属性

    在脚本中可以使用组织organization这个对象,这个对象中包含了组织的所有属性。

    • 示例1:映射组织名称:
      var orgName = organization.name;
      orgName.toString();
    • 示例2:映射组织编码:
      var orgCode = organization.code;
      orgCode.toString();
    • 示例3:映射组织id:
      var id= organization.id;
      id.toString();
  • 系统属性

    获取系统属性,如日期。

    示例:映射明天的当天时间:

    var date =new Date();
    date.setDate(date.getDate()+1); 
    date.toISOString();