最佳实践
文档版本 01
发布日期 2021-11-05
版权所有 © 华为技术有限公司 2021。 保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
目 录
1 用户与权限... 1
1.1 什么是业务用户...1
1.2 如何添加业务权限凭证...4
1.3 如何实现业务用户登录... 12
1.4 平台权限认证机制... 46
1.5 轻应用建议的权限机制... 51
1.6 行业应用建议的权限机制... 60
1.7 如何集成第三方帐号登录... 65
2 开发规范...73
2.1 应用工程构建规范... 73
2.1.1 工程命名和目录结构... 73
2.1.2 工程配置... 76
2.1.3 工程服务... 80
2.2 脚本开发规范...82
2.2.1 命名... 82
2.2.2 注释... 82
2.2.3 引用... 83
2.2.4 定义... 84
2.2.5 调试... 85
2.2.6 语法... 85
2.2.7 SQL... 87
2.2.8 代码风格... 89
2.2.9 安全编码... 90
2.2.10 调用约束... 91
2.2.11 代码规范案例汇总... 91
2.3 服务编排开发规范... 92
2.3.1 元素命名... 92
2.3.2 图元编排... 93
2.3.3 参数定义... 94
2.3.4 异常处理... 94
2.3.5 调用约束... 96
2.4 前端开发规范...96
2.4.1 标准页面公共组件样式规范... 96
2.4.2 Widget 开发规范... 111
2.5 错误码定义规范...114
2.6 高性能编码规范...114
2.7 系统参数命名规范... 117
2.8 业务权限配置规范... 119
3 多人协作开发...121
4 如何在运行环境中,实现游客访问标准页面... 125
1 用户与权限
1.1 什么是业务用户
什么是业务用户
AppCube平台存在两类用户:用户(User)和业务用户(PortalUser)。
● 用户(User)也可以称为平台用户,是指访问AppCube的开发者帐号,用来管理 应用和业务用户。购买AppCube的帐号默认拥有所有权限,是管理员用户,可添 加其他用户帐号并为其配置需要的权限。
● 业务用户(PortalUser)是访问在AppCube中开发的一个业务应用的用户帐号。
当一个项目使用了AppCube提供的业务服务功能,而业务用户是用这个项目注册 的帐号来开通试用业务系统的,并不是直接注册AppCube的帐号,这种用户即是 AppCube的业务用户。
例如,在AppCube中注册了帐号“A”,并使用帐号“A”在AppCube中开发了一个应 用“X”。帐号“B”是通过应用“X”注册的帐号,并登录使用应用“X”。这种情况 下,帐号“A”是管理员用户(User),帐号“B”是业务用户(PortalUser)。
图1-1 用户类型
业务用户拥有哪些能力
● 业务用户可以根据权限访问应用、查看导航条菜单。
● 业务用户可以根据权限查看应用的页面布局。
● 业务用户可以根据权限查看、创建、编辑和删除应用中的对象。
● 业务用户可以根据权限查看和编辑应用中的对象字段。
● 业务用户可以根据权限执行应用中开发的服务编排、脚本、BPM。
● 业务用户可以根据权限访问在应用中自定义的公共接口。
说明
在AppCube中新添加的业务用户,若没有配置指定的权限,默认使用系统预置的Portal User Profile权限。若业务用户需要额外的权限,需要对业务用户进行权限的配置,具体操作请参见如 何给业务用户添加业务权限凭证。
如何注册业务用户
业务用户是访问AppCube提供的业务服务的用户,在添加业务用户时需要调用在 AppCube中开发的注册脚本来实现。而在AppCube中开发脚本需要在创建的应用App 中进行。在开发注册脚本之前,创建一个空白应用“A”。
下面将以创建的“A”应用为例介绍如何创建业务用户。创建应用的具体操作,请参见 创建应用。
1. 在“我的应用”中,单击“A”应用,进入“A”应用。
2. 在“A”应用开发页面中单击 ,添加一个名为“Script”的目录用来存放将要创 建的脚本。
图1-2 “A”应用开发页面
3. 将鼠标放在“Script”上,单击界面上出现的“+”,在弹出菜单中选择“脚 本”。
4. 在弹窗中,选中“创建一个新脚本”,在“名称”文本框中输入
“registerPortalUser”,单击“添加”。
5. 在代码编辑器中插入如下脚本代码。
import * as buffer from "buffer";
import * as crypto from "crypto";
import * as db from "db";
//定义入参结构,注册帐号的用户名、密码为必填字段。若根据业务需要,需其他注册帐号的字段,则根据
portalUser表字段按入参格式进行新增即可。
//表字段格式参考portalUser表,代码入参格式参考下方:username入参格式。
@action.object({ type: "param" }) export class ActionInput {
@action.param({ type: 'String', required: true, label: 'string' }) username: string;
@action.param({ type: 'String', required: true, label: 'string' }) password: string;
}//定义出参结构,若根据业务需要,出参结构包含多个字段,根据已有格式添加其他字段即可
@action.object({ type: "param" }) export class ActionOutput { @action.param({ type: 'String' }) msg: string;
}//使用数据对象PortalUser
@useObject(['PortalUser'])
@action.object({ type: "method" })
export class RegisterPortalUser { //定义接口类,接口的入参为ActionInput,出参为ActionOutput @action.method({ input: 'ActionInput', output: 'ActionOutput' })
public registerPortalUser(input: ActionInput): ActionOutput {
let out = new ActionOutput(); //新建出参ActionOutput类型的实例,作pu为返回值 let error = new Error(); //新建错误类型的实例,用于在发生错误时保存错误信息 try {
let s = db.dynamicObject('PortalUser');
let saltedPassword = salt(input.password);
//注册信息相关字段,如根据业务需要注册额外字段,需按照入参结构中的字段添加 let userMsg = {
"usrName": input.username,//定义用户名,固定字段 "name": input.username,//定义用户名称
"userPassword": saltedPassword['saltedPassword'],//注册密码相关处理,固定字段 "passwordSalt": saltedPassword['salt']//注册密码相关处理,固定字段
};
let userId = s.insert(userMsg);
if (userId) {
out.msg = "注册成功!";
} else {
error.name = "USERERROR";
error.message = "注册失败!";
throw error;
}
} catch (error) {
if (error.name == "405230618") { error.message = "该用户名已注册!"
}
console.error(error.name, error.message);
}
return out;
}
}function _salt(password: string, saltBuf: buffer.Buffer, encoding: buffer.Encoding = buffer.Encoding.Base64): string {
const passwordBuf = buffer.from(password)
const crypt = crypto.pbkdf2(passwordBuf, saltBuf, 1000, 32, crypto.Hashs.SHA1) return crypt.toString(encoding)
}function salt(password: string, encoding: buffer.Encoding = buffer.Encoding.Base64): object { const saltBuf = crypto.randomBytes(6)
const saltedPassword = _salt(password, saltBuf, encoding) return {
salt: saltBuf.toString(encoding), saltedPassword: saltedPassword }
}
注意
在使用业务用户时,为了保证数据安全,用户密码要自行加密,以密文形式进行 存储。示例代码可参考上述代码。
6. 单击编辑器上方 ,保存脚本。
7. 测试脚本能否正常执行。
a. 单击编辑器上方 ,执行脚本。
b. 在界面底部输入测试数据,单击测试窗口右上角执行图标。
{ "username": "test_cs", "password": "******"
}
其中,******为test_cs业务用户对应的密码。执行完成后,在“输出”页签会 返回查询结果。返回结果如图1-3所示,表明“test_cs”业务用户注册成功。
图1-3 返回结果
8. 单击编辑器上方 ,启用脚本。
在“管理 > 用户 > 业务用户”中,可查看已添加的业务用户。
图1-4 查看已添加的业务用户
1.2 如何添加业务权限凭证
为什么要添加业务权限凭证
通过业务权限凭证,可以控制AppCube的用户对于自定义公共接口的访问权限,如果 用户权限中包含了某个业务权限凭证,该用户将能够调用配置了相应业务权限凭证的 自定义公共接口。
什么是业务权限凭证?
业务权限凭证用于控制接口的访问权限。AppCube提供了两种方式对API接口访问权限 的控制:配置权限脚本和配置API接口的业务权限凭证。优先通过权限脚本进行权限验 证,根据脚本的返回值判断下一步的操作。
● 对于配置了业务权限凭证的接口,需要在权限的“业务权限凭证”页签中接入相 应的业务权限凭证,才可调用API接口。若平台用户没有配置业务权限凭证,则继 续校验Profile权限中的数据权限(例如执行服务编排、执行脚本、对象的增删改 查、API读、API写权限)。若业务用户没有配置业务权限凭证,调用接口直接报 错,不会继续校验Profile权限中的数据权限。
● 对于未配置了业务权限凭证的接口,则需要查看内置系统参数
“bingo.permission.customapi.check”取值,该参数控制公共接口未绑定业务权 限凭证时的逻辑。
– 若该参数取值为“是”,公共接口未绑定业务权限凭证时,业务用户无法访 问该接口;对于平台用户,则继续校验Profile权限中的数据权限。
– 若该参数取值为“否”,公共接口未绑定业务权限凭证时,业务用户可直接 访问该接口,无需鉴权;对于平台用户,则继续校验Profile权限中的数据权 限。
例如:运行环境或者沙箱环境中,该内置参数配置为“是”,接口未绑定业务权限凭 证,即使在权限设置中勾选“API读”与“API写”权限,业务用户也无法操作对象数 据;若业务用户需要操作对象数据,请将该内置参数配置为“否”。
查看和配置该系统参数的方法为:在AppCube管理中心选择“系统管理 > 系统参 数”,在“内置系统参数”查看和配置该参数。
图1-5 内置系统参数
如何给业务用户添加业务权限凭证
步骤1 创建业务权限凭证。
以在“A”应用中添加业务用户业务权限凭证为例,创建1个业务凭证“cs”,即普通 业务用户业务凭证。
1. 在AppCube开发环境中,进入已创建的“A”应用中,单击“配置”。
2. 在“业务权限凭证”页签,单击“新建”。
图1-6 在应用中创建业务权限凭证
说明
在AppCube管理中心的“业务权限凭证”中,也可以单击“新建”创建业务权限凭证。如 果您已经在管理中心的“业务权限凭证”中创建了业务凭证,可直接单击图1-6的“导 入”,将已有的业务权限凭证导入当前应用中。
图1-7 在管理页面创建业务权限凭证
3. 在标签和名称输入框输入“cs”后,单击“保存”,完成“cs”普通业务用户业务 凭证的创建。
图1-8 新建业务权限凭证
步骤2 创建权限配置。
业务用户的权限主要是在AppCube预置的Portal User Profile权限基础上,进行自定义 业务用户权限配置和拓展实现的。在AppCube的权限配置功能中,基于某个权限配置 的新创建的Profile,将会继承原Profile的全部权限。在后续有新的业务用户注册时,
只需要为新的业务用户配置对应的权限,即可获取该权限配置中的权限。
以在“A”应用中创建普通业务用户权限“csProfile”为例。
1. 在AppCube开发环境首页,单击“管理”,进入管理中心。
2. 选择“用户管理 > 权限配置”,在右侧“权限配置列表”中,单击“新建”。
3. 在新建权限配置弹窗中,选择“现有权限配置”为“Portal User Profile”,选择
“普通克隆”,设置要新增的“权限配置名称”为“csProfile”,单击“保 存”。
图1-9 基于 Portal User Profile 新增权限配置
说明
选择继承克隆时,除基本信息和业务权限凭证,其余权限屏蔽编辑按钮。选择普通克隆时 则不会屏蔽编辑按钮。
图1-10 继承克隆屏蔽编辑按钮
4. 在权限配置列表中,单击“csProfile”,进入权限配置详情。
5. 在“基本信息”页签,单击“基本信息”右侧编辑按钮 ,可进行权限配置。
图1-11 权限配置
说明
这里的权限默认继承AppCube预置的Portal User Profile权限基础,具体权限配置可以根据 业务需要进行自由配置。
6. 单击“业务权限凭证”,在“业务权限凭证”下,勾选“cs”业务凭证,再单击
,保存设置。
图1-12 配置业务凭证权限
步骤3 配置业务用户权限。
在添加业务用户后,该业务用户是没有任何权限使用AppCube提供的服务的。若需要 该业务用户正常使用AppCube,则需要为该用户配置相关的使用权限。以在“A”应用 中通过脚本创建的“test_cs”业务用户为例。
1. 在AppCube开发环境首页,单击“管理”,进入管理中心。
2. 选择“用户管理 > 业务用户”,进入业务用户列表页面。
3. 在业务用户页面单击需要配置权限的业务用户“test_cs”,进入业务用户详情页 面。
4. 在业务用户详情页面单击“权限集”下的编辑按钮,在弹出框中选中左侧列表的
“csProfile”后,单击 将选中的权限添加至右侧列表,然后单击“保存”完成 权限的配置。
图1-13 权限配置窗口
说明
– “csProfile”是基于“Portal User Profile”创建的扩展权限集。除了“csProfile”权限 集,其他权限都是系统预置的权限集。对于系统预置的权限集,建议不进行修改,基于 系统预置的权限集创建的权限集(如“csProfile”)继承了系统预置的所有权限。
– 勾选“覆盖业务用户权限”时(单击“覆盖业务用户权限”后的编辑按钮可进行勾选操 作),该业务用户所有权限读取“权限集”中的权限设置;不勾选时,该业务用户应用 程序权限读取“Portal User Profile”设置,其余权限读取“权限集”中的权限设置。
图1-14 覆盖业务用户权限配置
----结束
如何给接口添加业务权限凭证
若用户或者业务用户需要通过权限访问接口,需要给该接口添加业务权限凭证。
下面将以在1.1中创建的“A”应用为例介绍如何给接口添加业务权限凭证。
1. 在“我的应用”中,单击“A”应用,进入“A”应用开发界面。
2. 在“A”应用开发界面左下角单击“配置”,在右侧选择“业务权限凭证”,进入 应用配置的业务权限凭证页面。
3. 在应用配置的业务权限凭证页面,单击“导入”按钮,在弹出框中选择需要导入 的业务权限凭证后,单击“导入”按钮完成业务权限凭证的导入。
图1-15 导入业务权限凭证
说明
在“A”应用中选择导入业务权限凭证是因为在本章节步骤1中已经创建了需要的“cs”业 务凭证。如果之前还未创建需要的业务凭证,则可以在本页面中单击“新建”按钮进行新 建业务凭证,也可以参考步骤1中步骤创建业务凭证。
4. 在“A”应用的开发页面,单击“服务”进入自定义访问控制页面。
5. 在自定义访问控制页面中单击需要配置业务凭证的接口的名称,进入公共接口详 情页面。
6. 单击业务权限凭证模块下的“编辑”按钮,在弹出框左侧列表中选中需要添加的 业务权限凭证后,单击 ,将选择的业务权限凭证添加至右侧列表,单击“保 存”按钮,完成业务权限凭证的添加。
图1-16 编辑业务权限凭证
7. 在AppCube开发环境首页,单击“管理”,进入管理中心,选择“用户管理 > 权 限配置”,查看需要配置业务权限凭证的权限详情,单击“业务权限凭证”页 签,将相应的业务权限凭证进行编辑,勾选“可接入”选项。
图1-17 权限绑定业务权限凭证
注意
在以“A”应用为例的实例中权限绑定业务权限凭证的操作在步骤2已经执行过,
此处可不执行。
若没有执行过权限绑定业务权限凭证的操作,此步骤必须执行。
8. 在管理中心,选择“用户”菜单或“业务用户”菜单,对平台用户或业务用户配 置相应的权限,该用户即可获取调用相应API接口的权限,否则将无法通过API接 口的业务权限凭证校验。
注意
在以“A”应用为例的实例中,配置“业务用户”权限的操作在步骤3已经执行 过,此处可不执行。
若没有执行过配置“用户”或者“业务用户”权限操作,此步骤必须执行。
1.3 如何实现业务用户登录
业务用户的登录方式
业务用户登录AppCube有两种登录方式:后台登录和前台登录。
● 业务用户在后台登录时,是使用自定义的服务编排来调用“login”脚本,查询登 录帐户密码,判断当前登录的帐号密码是否正确来实现“业务用户”后台登录功 能。
● 业务用户在前台登录时,需要先在线下开发一个登录组件,并上传到高级页面,
并在高级页面中配置组件桥接器中的数据。最后在页面中输入登录帐号密码,通 过来调用“用户登录服务编排”,实现“业务用户”页面登录功能。
业务用户的登录机制
业务用户无论是使用前台登录,还是使用后台登录,在登录过程中的服务逻辑实现过 程都如下所示:
1. 通过调用“帐号密码校验”脚本,查询登录帐户密码,判断当前登录的帐号密码 是否正确。
2. 如果判断帐户密码错误,直接执行“帐户密码错误”;判断帐户密码正确,继续 判断是否有验证码。
3. 如果判断当前登录没有验证码,则直接执行登录,判断当前有验证码,则继续判 断验证码是否正确。
4. 如果判断验证码正确,则执行登录操作,判断验证码错误,则执行验证失败。
业务用户帐号密码校验(登录)脚本
业务用户无论是使用“前台登录”还是“后台登录”,实现业务用户登录的基础都需 要创建一个帐号密码校验脚本。以什么是业务用户中创建的“A”应用为例创建帐号密 码校验脚本。
1. 在“我的应用”中,单击“A应用”,进入应用。
2. 将鼠标放在“Script”上,单击界面上出现的“+”,在弹出菜单中选择“脚 本”。
图1-18 脚本菜单
3. 在弹窗中,选中“创建一个新脚本”,在“名称”文本框中输入“login”,单击
“添加”。
图1-19 新增脚本
4. 在代码编辑器中插入如下脚本代码。
import * as buffer from"buffer";
import * as crypto from"crypto";
import * as db from"db";
//定义入参结构,帐号的用户名、密码为必需字段。若根据业务需要,需其校验他字段(例如验证码),则 根据帐号密码字段的格式进行新增即可。
@action.object({type:"param"}) export class ActionInput{
@action.param({type:'String', required:true, label:'string'}) username:string; //用户名
@action.param({type:'String', required:true, label:'string'}) password:string; //密码
@action.param({type:'String', required:true, label:'string'})
captcha:string; //验证码,本脚本只是为了校验帐号密码,因此用不到验证码,验证码也不是必需字 段。在实现业务用户后台登录的Flow中,Flow调用此脚本,需要判断验证码,所以在此脚本中添加了验证 码字段。}
//定义出参结构,结构中的字段可以根据业务需要按下方样例结构进行添加或减少。
@action.object({type:"param"}) export class ActionOutput{
@action.param({type:'String'}) msg:string;//登录信息 @action.param({type:'String'}) username:string;//用户名 @action.param({type:'String'}) userId:string;//用户ID
@action.param({type:'String'}) captcha:string;//验证码 }//使用数据对象PortalUser
@useObject(['PortalUser'])
@action.object({type:"method"}) export class Login{
//定义接口类,接口的入参为ActionInput,出参为ActionOutput @action.method({ input:'ActionInput', output:'ActionOutput'}) public login(input:ActionInput):ActionOutput{
let out =new ActionOutput();
//新建出参ActionOutput类型的实例,作为返回值 let error =new Error();
//新建错误类型的实例,用于在发生错误时保存错误信息 try{
out.captcha = input.captcha;
let s = db.object('PortalUser');
let condition ={
"conjunction":"AND", "conditions":[{
"field":"usrName", "operator":"eq", "value": input.username }]
};
let user = s.queryByCondition(condition);
if(user && user.length ==1){
if(validate(user[0].passwordSalt, user[0].userPassword, input.password)){
out.msg ="登录成功!";
out.username = user[0].usrName;
out.userId = user[0].id;
}else{
out.msg ="帐号或者密码错误!";
} }else{
out.msg ="帐号或者密码错误!";
}
}catch(error){
console.error(error.name, error.message);
out.msg = error.message;
}
return out;
}
}function _salt(password:string, saltBuf: buffer.Buffer, encoding: buffer.Encoding=
buffer.Encoding.Base64):string{
const passwordBuf = buffer.from(password)
const crypt = crypto.pbkdf2(passwordBuf, saltBuf,1000,32, crypto.Hashs.SHA1) return crypt.toString(encoding)
}function validate(salt:string, userSaltedPassword:string, password:string, encoding: buffer.Encoding=
buffer.Encoding.Base64):boolean{
const saltBuf = buffer.from(salt, encoding);
const saltedPassword = _salt(password, saltBuf, encoding);
return saltedPassword === userSaltedPassword }
5. 单击编辑器上方 保存图标。
6. 测试脚本能否正常执行。
a. 单击编辑器上方 执行图标。
b. 在界面底部输入测试数据,单击测试窗口右上角 执行图标,其中
“test_cs”、“Admin_1234”为注册的业务用户帐号密码,“captcha”验 证码非必填项为空。
{"username":"test_cs",
"password":"Admin_1234",
"captcha":""
}
执行成功,会在“输出”页签返回查询结果。
图1-20 返回结果
7. 测试成功,单击编辑器上方 启用图标,发布脚本。
如何后台实现业务用户登录
业务用户在后台登录时,是使用自定义的服务编排来调用“帐号密码校验”脚本,查 询登录帐户密码,判断当前登录的帐号密码是否正确来实现“业务用户”后台登录功 能。所以“业务用户登录”服务编排开发的大致过程:先拖拽1个脚本图元,3个决策 图元以及3个赋值图元,再分别配置各个图元属性,然后配置各个图元之间连线类型,
最后保存启用。
以1.1中创建的“A”应用为例:
1. 在“我的应用”中,单击“A”应用,进入应用开发页面。
2. 在开发页面中,单击“目录”,创建一个Flow目录。
图1-21 创建目录
3. 将鼠标放在“Flow”上,单击界面上出现的“+”,在弹出菜单中选择“服务编 排”。
图1-22 选择服务编排
4. 选中“创建一个新的服务编排”,在“标签”和“名称”文本框中输入
“login”,并设置类型为“Autolaunched Flow”,单击“添加”。
图1-23 创建服务编排
5. 定义服务编排用到的变量。
a. 单击 ,展开全局上下文,再单击“变量”后的 ,设置参数名称为
“username”。
图1-24 新增变量
b. 重复上一步,定义其他变量。
需要定义的变量如下表所示。
表1-1 服务编排变量说明
名称(变量名称,唯一标识) 数据类型
username 文本
password 文本
captcha 文本
msg 文本
userId 文本
loginMsg 文本
说明
此服务编排是用来实现业务用户登录逻辑的,所以在这个服务编排中的变量需要包含 业务用户帐号密码校验脚本(在业务用户帐号密码校验(登录)脚本创建的)中使用 的全部参数字段(包含输入参数和输出参数)。若自定义登录脚本中包含额外字段,
在服务编排的变量中也需要相应添加。
c. 单击“公式”后的 ,在左侧公式弹窗中,设置“名称”为
“portalUserLogin”,“表达式”为“PORTALUSERLOGIN({!
username})”,单击“保存”。
图1-25 添加公式变量“portalUserLogin”
d. 参考上一步,创建公式变量“verifyCode”。
需要定义的变量如下表所示。
表1-2 公式变量说明
名称 表达式
portalUserLogin PORTALUSERLOGIN({!username})
verifyCode VERIFYCODEWITHTYPE({!captcha},"login")
6. 拖拽图元到服务编排画布,并配置图元的基本属性。
a. 从图元区分别拖拽脚本(1个)、决策(3个)、赋值(3个)图元到画布中,
排列,如下图所示。
图1-26 拖拽脚本(1 个)、决策(3 个)、赋值(3 个)图元
b. 选中“Script0”图元,在右侧基本信息中,设置“标签”为“查询用户”。
c. 参考上一步,设置其他图元的“标签”属性,具体值如下表所示。
表1-3 设置其他图元标签属性 名称(变量唯一标识,不需要修 改)
标签
Decision0 判断帐号密码
Decision1 判断是否包含验证码
Decision2 校验验证码
Assignment0 帐号密码错误 Assignment1 执行登录 Assignment2 验证失败
图1-27 修改后图元
7. 配置“查询用户”脚本图元。
a. 单击 ,指定图元对应的脚本名称 (SYL__login),并配置脚本的输入输出 参数。
图1-28 指定脚本
注意
对应的脚本是业务用户帐号密码校验(登录)脚本中创建发布的帐号密码校 验脚本。
若这里无法选择需要的脚本,请检查创建的脚本是否已发布。
b. 单击“全局上下文”,显示变量列表,从“变量”中,拖拽“username”、
“password”和“captcha”到“输入参数”下对应的“源”输入框中,在
“输出参数”下,单击4次“新增行”,依次添加下拉选项中的输出参数字 段,并从“变量”中拖拽相应的字段到“目标”输入框下,字段与变量对应 关系如下图所示。
注意
脚本图元中输入参数和输出个数和指定脚本中需要的输入参数字段数是一 致。若自定义脚本的输入参数有额外字段,额外的字段也需要同样操作。
请直接从全局上下文拖拽“变量”到对应的输入输出参数下,如果手动输入 请确认输入参数与全局上下文中变量的值一致。
图1-29 拖拽脚本的输入输出参数
8. 配置“判断帐号密码”决策图元。
a. 选择“判断帐号密码”图元,在右侧单击 图标,修改“默认”的“名称”
为“CheckFail”。
图1-30 修改“默认”结果名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为“CheckSuccess”,在
“可视”下单击“新增行”,并拖拽变量中的“msg”到“资源”下,设置
“比较符”为“==”,“值”为“"登录成功!"”。
注意
1. 请直接从全局上下文拖拽变量“msg”到“资源”下,如果手动输入请确 认输入参数与全局上下文中变量的值一致。
2. “登录成功!”需要与“login”登录脚本中的输出参数一致。
图1-31 修改可编辑的结果
9. 配置“判断是否包含验证码”决策图元。
a. 选择“判断是否包含验证码”图元,在右侧单击 图标,修改“默认”的
“名称”为“hasVerifyCode”。
图1-32 修改“默认”结果名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为“noVerifyCode”,在
“可视”下单击“新增行”,并拖拽变量中的“captcha”到“资源”下,设 置“比较符”为“==”,“值”为“""”。
图1-33 修改可编辑的结果
10. 配置“校验验证码”决策图元。
a. 选择“校验验证码”图元,在右侧单击 图标,修改“默认”的“名称”为
“verifyCodeFail”。
图1-34 修改“默认”名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为
“verifyCodeSuccess”,在右侧选择“公式”,并从全局上下文中,拖拽
“verifyCode”到“公式”下。
图1-35 修改可编辑的结果
11. 配置“帐号密码错误”赋值图元。
选择“帐号密码错误”图元,在右侧单击 图标,单击“新增行”,从全局上下 文的“系统变量”中,拖拽“$Flow.ResMsg”到“赋值”下,并设置“操作符”
为“=”,拖拽“msg”到“值”;然后再单击新增行后,拖拽“系统变量”下的
“$Flow.ResCode”到“赋值”的“变量”下,设置“操作符”为“=”,设置
“值”为“"1"”。
注意
请直接从全局上下文拖拽变量到“值”下的对应位置,如果手动输入请确认输入 参数与全局上下文中变量的值一致。
图1-36 配置“帐号密码错误”图元
12. 配置“执行登录”赋值图元。
a. 选择“执行登录”图元,在右侧单击 图标,单击4次“新增行”。
b. 从全局上下文,拖拽“msg”等字段到“赋值”的“变量”下,并设置“操 作符”为“=”,然后再拖拽“值”下的各个值,具体字段对应关系,如下图 所示。
图1-37 拖拽“执行登录”赋值的变量及值
注意
请直接从全局上下文拖拽变量到“值”下的对应位置,如果手动输入请确认 输入参数与全局上下文中变量的值一致。
表1-4 变量与值对应关系
变量 操作符 值
loginMsg = portalUserLogin
msg = msg
username = username
userId = userId
13. 配置“验证失败”赋值图元。
选择“验证失败”图元,在右侧单击 图标,单击“新增行”,从全局上下文
“系统变量”,拖拽“$Flow.ResMsg”、“$Flow.ResCode”到“赋值”下,并 设置操作符为“=”,分别设置“值”为“"帐号或者密码错误!"”、“"1"”。
表1-5 赋值
变量 操作符 值
$Flow.ResMsg = "帐号或者密码错误!"
$Flow.ResCode = "1"
图1-38 配置“验证失败”赋值图元
14. 拖拽图元连线,并配置连线属性。
a. 在画布上,把鼠标放在起点图元 图元上,从“+”拖动鼠标,在起点图元 和“查询用户”图元间增加连线;即将当前脚本设置为服务编排的起始节 点。
b. 依次在“查询用户”、“判断帐号密码”、“判断是否包含验证码”、“执 行登录”图元直接拖拽连线。
图1-39 拖拽连线
c. 单击“判断帐号密码”与“判断是否包含验证码”图元之间的连线,再右侧 属性单击 ,在“连线”中修改“连线类型”为“CheckSuccess”。
图1-40 选中连线
图1-41 修改连线类型
d. 单击“判断是否包含验证码”与“执行登录”图元之间的连线,再右侧属性 单击 ,在“连线”中修改“连线类型”为“noVerifyCode”。
e. 从“判断帐号密码”图元上拖拽一条连线到“帐号密码错误”图元。
f. 从“判断是否包含验证码”图元上拖拽一条连线到“校验验证码”图元。
g. 从“校验验证码”图元上拖拽一条连线到“验证失败”图元。
h. 从“校验验证码”图元上拖拽一条连线到“执行登录”图元,并设置该连线 的“连线类型”为“verifyCodeSuccess”。
连线拖拽完成,如下图所示。
图1-42 拖拽图元连线
15. 定义服务编排的输入、输出参数,并保存服务编排。
a. 鼠标在画布空白处点一下,单击右侧 ,设置服务编排的输入输出参数,
如下图所示。
图1-43 拖拽服务编排的输入输出参数
注意
服务编排的输入参数是用来执行服务编排时输入的参数,同时也是执行帐号 密码校验脚本时的输入参数。所以当帐号密码校验脚本的有额外的输入参数 字段,服务编排的输入参数也需要同步增加。
服务编排的输出参数是执行帐号密码校验脚本时返回的参数,所以当帐号密 码校验脚本的有额外的输出参数字段,服务编排的输出参数也需要同步增 加。
b. 单击服务编排界面上部的 保存图标,保存服务编排。
系统会弹出窗口,显示编译结果。
16. 测试服务编排能否正常执行。
a. 单击服务编排编辑器上方 执行图标,进入服务编排测试页面。
图1-44 服务编排测试页面
b. 在“Flow Run”界面中输入测试数据,单击“运行”。其中“test_cs”、
“Admin_1234”为业务用户的帐号和密码。
{ "username": "test_cs", "password": "Admin_1234", "captcha": ""
}
执行成功,界面上会返回设备对象中的全部信息,样例如下:
图1-45 返回值示例
说明
返回值提示登录成功,完成业务用户的登录。业务用户登录成功后,返回AppCube 中,刷新页面后在页面右上角可以看到当前登录的用户已变成在服务编排中输入的业 务用户。
17. 登录测试成功后,再次使用租户帐号登录AppCube,进入“A”应用,选择刚刚测 试成功的“login”服务编排进入编辑器,单击编辑器上方 启用图标,发布服务 编排。
18. 服务编排发布后,单击左下角“服务”,进入“自定义访问控制页面”。
图1-46 服务
19. 单击“新建按钮”新建公共接口。
图1-47 新建公共接口
说明
在新建公共接口时,在资源中选择已发布的服务编排。URL填写的内容是定义新建的公共 接口提供外部访问的URL。
20. 新建公共接口完成后,参考如何给接口添加业务权限凭证中操作,给测试成功的 服务编排添加业务权限凭证。添加结果如下:
图1-48 给服务编排添加业务权限
如何页面实现业务用户登录
业务用户在前台登录时,需要先在线下开发一个登录组件,并上传到高级页面,并在 高级页面中配置组件桥接器中的数据。最后在页面中输入登录帐号密码,通过来调用
“用户登录服务编排”,实现“业务用户”页面登录功能。
以在1.1中创建的“A”应用中开发登录页面流程如下图所示。
图1-49 应用登录页面开发流程
开发登录组件
开发自定义组件:本案例中提供已经开发好的自定义登录组件userLogin.zip;如果想 要了解自定义登录组件的开发方法,请参考线下开发自定义登录组件。
注意
将登录组件拖入到高级页面后,单击选中“userLogin”组件,在右侧属性设置的“属 性”页签最下端“Parameters”配置项下,设置“login API”为“/SYL__A/1.0.0/
Flow_login”。
图1-50 添加登录服务 URL
“login API”为登录接口的URL后半段,请根据实际情况修改,登录接口是在如何后 台实现业务用户登录章节创建。
图1-51 loginAPI 地址
线下开发自定义登录组件
1. 在左侧资产下的组件模板中,单击“widgetVueTemplate”,再单击“下载”按 钮。
图1-52 下载组件模板
2. 在弹出的窗口中,输入组件名称,并单击“保存”,将组件模板保存到本地,并 解压。
图1-53 输入组件名称
3. 查看解压后的组件目录。
说明
1. 目录结构如图所示,其中userLogin.js文件是写vue业务逻辑的代码,userLogin.ftl用于 写html代码,userLogin.css用于写样式代码,userLogin.editor.js以及packageinfo.json 是配置文件。
图1-54 目录结构
2. 其中userLogin.js 、userLogin.ftl、userLogin.css文件需要用户自己进行代码开发,
userLogin.editor.js以及packageinfo.json配置文件的修改请参照4和5。
4. 在本地编辑器中打开文件夹,把userLogin.editor.js文件中的config代码改为如下 代码,用于配置桥接器:
config: [ {
type: 'connectorV2', name: 'FlowConnector', label: 'Flow Connector', model: 'ViewModel', },
{
type: 'connectorV2',
name: 'common.GetConnector', label: 'View API Get Connector', model: 'ViewModel',
}, {
type: 'connectorV2',
name: 'common.PostConnector', label: 'View API Post Connector', model: 'ViewModel',
}, {
type: 'connectorV2',
name: 'common.PutConnector', label: 'View API Put Connector', model: 'ViewModel',
}, {
type: 'connectorV2',
name: 'common.DeleteConnector', label: 'View API Delete Connector', model: 'ViewModel',
}, ]
5. 将packageinfo.json文件中修改“requires” 代码块内容为如下红色代码。
{ "widgetApi": [ {
"name": "userLogin"
} ],
"widgetDescription": "", "authorName": "", "localFileBasePath": "", "requires": [
{
"name": "global_Vue", "version": "100.8.3"
}, {
"name": "global_Element", "version": "101.0.3"
}, {
"name": "global_VueI18n", "version": "100.7.3"
}, {
"name": "global_VueRouter", "version": "1.0.1"
} ] }
6. 将修改后的配置文件和自定义开发的文件压缩成一个zip包。压缩后,即可根据需 要上传到AppCube,供高级页面使用。
说明
用户开发登录组件代码可参考已开发好的userLogin.zip中代码进行开发。
上传自定义登录组件
1. 在AppCube开发环境首页“项目”页签的“我的应用”中,单击“A”应用进入应 用。
2. 在左侧列表单击 ,选择“高级页面 > 组件”进入组件页面。
图1-55 组件列表页面
3. 单击“提交新组件”进入提交新组件页面。
4. 单击“上传”,选择之前下载的“userLogin.zip”包(名称自动生成为上传的包 的名称“userLogin”),并将在“发行说明”中填写“自定义登录组件”,然后 单击“提交”进行上传。
图1-56 上传组件
上传成功后,在后续创建的高级页面中,即可使用该自定义组件。
组装“业务用户登录”页面
“业务用户登录”页面是一个高级页面,主要是通过引用上传的自定义登录组件,再 配置相关参数,来实现登录功能。
说明
在组装业务用户登录页面时,需要配置从登录页面登录成功后跳转的页面,所以需要提前创建一 个高级页面。
● 在本案例中,创建了一个Home页面。Home页面中没有实际数据,在Home页面中拖拽了几 个图表组件,然后保存发布出来样例页面。在实际开发过程中,可以根据业务需要,选择跳 转到需要的页面,或者执行自定义的业务逻辑。
图1-57 Home 页面
1. 创建高级页面。
a. 进入AppCube开发环境首页,在“项目”页签下的“我的应用”中,单击
“A”应用进入应用。
b. 单击 ,进入工作目录,并创建一个Page目录。
图1-58 创建 Page 目录
c. 将鼠标放在“Page”上,单击界面上出现的“+”,在弹出菜单中选择“高 级页面”。
图1-59 创建高级页面
d. 设置“页面标题”和“页面路径”为“Login”,并选择“绝对布局”,单击
“添加”。
图1-60 添加高级页面
2. 拖拽自定义组件“userLogin”到页面。
单击左上角 ,打开UI列表,再单击“全部”,然后单击“自定义”页签,搜索 到“userLogin”组件,将其拖进页面编辑区。
“userLogin”组件即是之前上传的自定义登录组件。
3. 设置自定义组件“userLogin”的位置属性。
a. 将“userLogin”组件拖拽到页面编辑区后,会在右侧显示该组件的属性配置 面板。
b. 在“位置”中,设置“距离左端”、“距离顶端”为“0”,“宽度”为
“1920”,“高度”为“1080”。
图1-61 设置组件位置
c. 组件位置、样式等属性修改完成后,单击页面上方 ,保存页面修改。
图1-62 样式修改完成的登录页面
d. 在目录中,将鼠标放在“Login”上,单击“...”,然后选择“设置”,在弹 窗中设置页面的拉伸属性,再单击“保存”。
图1-63 页面设置
图1-64 设置页面拉伸
4. 设置自定义组件“userLogin”的“数据”中的桥接器。
a. 将登录组件拖入到高级页面后,单击选中“userLogin”组件,在右侧属性设 置的“属性”页签最下端“Parameters”配置项下,设置“login API”为“/
SYL__A/1.0.0/Flow_login”。
图1-65 添加登录服务 URL
“login API”为登录接口的URL后半段,其中“SYL”为命名空间,“A”为 应用名,请根据实际情况修改,登录接口是在如何后台实现业务用户登录章 节创建。
图1-66 loginAPI 地址
b. 单击“数据”页签,然后单击“View API Get Connector”,设置“桥接器 实例”为“通用AppCube API数据桥接器”,“数据类型”为“动态数 据”,“Request Method”为“get”,如下图所示。
图1-67 设置桥接器
说明
● 桥接器实例:调用的桥接器名称。
● Request Method:调用的方法名,如get(查询)、put(修改)、post(增 加)、delete(删除)。
● 调用周期:此处不用配置。调用周期是每隔多少秒调用一次后台接口或者获取静 态数据,默认配置为“0”,表示只调用一次或者只获取一次静态数据。
c. 参考上一步,分别设置下图中框选的桥接器实例。
图1-68 设置其他桥接器
表1-6 桥接器实例配置
数据名 桥接器实例 数据类型 Request
Method View API Post
Connector 通用AppCube
API数据桥接器 动态数据 Post View API Put
Connector 通用AppCube
API数据桥接器 动态数据 Put View API Delete
Connector 通用AppCube
API数据桥接器 动态数据 Delete
5. 设置自定义组件“userLogin”的“事件”,使自定义组件与其他页面关联。
图1-69 需要配置的事件
a. 单击“go Homepage”后的齿轮图标,选择新建动作的类型。
b. 选择“新建动作>默认>页面跳转”进入跳转编辑页面。
图1-70 编辑页面跳转
注意
这里选择的内部页面是之前创建并发布的“Home”,在实际开发过程中,
可以根据业务需要,选择跳转到需要的页面,或者执行自定义的业务逻辑。
6. 在上述步骤完成后,单击Login页面上部的 保存图标,保存页面,再单击页面上 部的 发布图将页面发布。
7. 页面发布成功后,单击 预览图标预览发布的登录页面。
图1-71 预览的登录页面
说明
当前登录页中,输入业务用户帐号及密码,单击“登录”按钮的登录逻辑是通过“自定义 登录”组件,调用用户登录服务编排完成的。
8. 在预览的登录页面中输入配置了权限的业务用户的帐号密码,单击登录后,若页 面将跳转到“Home”页面,则业务用户登录成功。
图1-72 登录成功后的 Home 页面
1.4 平台权限认证机制
权限认证机制介绍
权限认证是指当用户登录AppCube平台时,对用户拥有的权限进行认证的机制。
AppCube提供的所有接口都需要通过认证之后才可以访问。而平台用户分以下几类,
不同类别的用户访问接口的权限会有所不同:
● 管理员用户 (User):也可以称为平台用户,是对应运行环境、开发环境用户,用 于管理开发应用。
使用认证机制为:“帐号密码登录认证”、“单点登录认证”和“OAuth 2.0鉴权 登录认证”。
● 业务用户(Portal User):业务用户是访问AppCube提供的业务服务的用户。
使用的认证机制为:“帐号密码登录认证”、“单点登录认证”和“OAuth 2.0鉴 权登录认证”。
● 匿名用户 (Guest):对于该类用户,平台接口都需要进行校验,未登录前使用 Guest用户身份来访问平台接口,一般会赋予最小的权限。
使用的认证机制为:“OAuth 2.0鉴权登录认证”。
权限认证方式
AppCube中的认证方式使用的是:在请求消息头上设置“access-token”进行认证。
在请求头上设置“access-token”是通过不同的认证接口来获取到Token。Token在计 算机系统中代表令牌(临时)的意思,拥有Token代表拥有某种权限。Token认证是在 调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。
如何通过 Token 进行认证
通过Token进行接口认证的方法说明如下表所示。
表1-7 接口认证说明
认证类别 认证方式 说明 使用的
用户
是否可以直 接访问接口 帐号密码
认证类别
帐号密码登 录
通过帐号密码直接访问登录接 口,成功校验则返回“access- token”,写到Cookies上。
平台用 户
是
单点登录 认证类别
单点登录(“CAS”
协议)
支持CAS单点登录方式,通过 CAS server登录后携带ticket重定 向到AppCube。 AppCube后台拿 ticket到CAS Server校验ticket合 法性,得到ticket对应的租户(可 选)、用户信息,然后校验该用 户是否存在,在指定了租户的情 况下,如果该用户不存在,则创 建对应用户; 没有指定租户的情 况下该用户不存在则直接报错,
并返回到CAS Server。
成功验证用户身份后,则生成 Session写到Cookies上, 重定向 到指定页面。例如:
通过红标华为WeLink单点登录 AppCube,AppCube返回access- token给WeLink,供WeLink访问 AppCube接口。
平台用 户、业 务用户
是
OAuth 2.0认证 登录类别
使用OAuth 2.0的client credentials 鉴权模式
根据鉴权ID和鉴权密钥调用获取 用户Token接口来获取
access_token。匿名用户一般通 过该方式来获取Token。
平台用 户
是
匿名登录 认证类别
使用OAuth 2.0的client credentials 鉴权模式
匿名用户一般根据鉴权ID和鉴权 密钥调用获取用户Token接口来 获取access_token。
匿名用 户
是
业务用户 登录使用 服务编排 中公式登 录
业务用户登 录(服务编 排中PORTALUSE RLOGIN公 式)
指定业务用户名,使用服务编排 的“PORTALUSERLOGIN”公式 来登录。
业务用 户
否(只能在 flow中访 问)
RefreshToken 特性
可以通过配置内置系统参数“bingo.service.refreshtoken.enable”为“是”的方式来 选择开启RefreshToken特性。开启后,业务用户通过服务编排的
“PORTALUSERLOGIN”公式登录AppCube时,会在Cookies中多返回一个“refresh- token”参数。可再通过发起请求“POST https://AppCube域名/baas/auth/v1.0/
refreshtoken”来获取一个新的Token(调该接口时需要在请求消息头上设置参数
“Content-Type”值为“application/json”,请求消息体中设置参数“grant_type”
值为“refresh_token”,“refresh_token”值为Cookies中返回的“refresh-token”
参数值)。原有的Token不管有没有失效,都会被置成失效状态。一般情况下,
“refresh-token”的有效期会比较长,在用户的权限配置中可通过配置“刷新凭证时 长”来控制其有效期。
具体操作如下:
1. 开启RefreshToken特性。
a. 在AppCube管理中心左侧导航栏中,选择“系统管理 > 系统参数”。
b. 在右侧选择“内置系统参数”页签,查找
“bingo.service.refreshtoken.enable”,单击搜索结果中的该参数名,在参 数详情页单击“值”后的编辑按钮,设置参数值为“是”,单击“保存”。
图1-73 查找参数
2. 业务用户(例如“test_cs”)通过服务编排的“PORTALUSERLOGIN”公式登录 AppCube。
a. 在“我的应用”中,单击某个应用,进入应用开发平台。
b. 将鼠标放在左侧某个文件夹,单击界面上出现的“+”,在弹出菜单中选择
“服务编排”。
c. 设置标签为“testPortalUserLogin”,单击“名称”的输入框,系统会自动 填充。然后单击“添加”。
d. 在服务编排编辑器页面右侧选择 。在全局上下文页面单击“公式”后的加 号。
e. 在公式页面设置“名称”为“portal”,“数据类型”设置为“文本”,表达 式为“PORTALUSERLOGIN("test_cs")”,单击“保存”,创建公式变量
“portal”,表达式中的“test_cs”为要登录系统的业务用户名。
f. 在服务编排编辑器页面右侧选择 。在全局上下文页面单击“变量”后的加 号,默认创建名为“variable0”的文本类型变量。
g. 在服务编排编辑器页面右侧选择 ,按照下图从全局上下文页面中拖拽参数 到出参区域。设置服务编排的出参。
h. 在左侧拖拽“逻辑”下“赋值”图标至画布中,松开鼠标左键。按照下图设 置赋值图元。
i. 连接所有元素。
j. 单击 ,保存服务编排。
k. 单击 ,不用输入入参直接单击“运行”,运行服务编排。
输出如下,表示业务用户已登录AppCube。
{ "interviewId": "002N000000jeTG4DKxSS", "outputs": {
"variable0": "XXX"
}}
其中“variable0”取值为业务用户的access-token值。
l. 在输出的页面按“F12”或者“Ctrl + Shift + I”,可开启调试工具。在 Cookies中获取“refresh-token”值。
3. 使用Postman发送请求,获取新Token。
a. 在本地PC上下载并安装Postman工具,该工具仅用于测试使用。
b. 使用Postman进行POST请求,URL配置为“https://AppCube域名/baas/
auth/v1.0/refreshtoken”,在请求消息头上设置参数“Content-Type”值为
“application/json”,请求消息体中设置参数“grant_type”值为
“refresh_token”,“refresh_token”值为2.l获取的“refresh-token”参数 值。输出的result值即为新的Token。原有的Token不管有没有失效,都会被 置成失效状态。
图1-74 Postman 发送请求
表1-8 请求消息头
消息头名称 描述 是否必选
Content-Type HTTP协议中设定的一个参数,用于标识返回 的内容用什么格式去解析,此处必须配置为
“application/json”。表示浏览器将返回内容 解析为json对象。
是
表1-9 消息体说明
参数名 描述 是否必选
grant_typ
e 授权类型,配置为“refresh_token”。 是 refresh_to
ken 配置为2.l获取的“refresh-token”参数
值。 是
1.5 轻应用建议的权限机制
什么是应用的权限机制
应用的权限机制是指应用是以何种方式来配置应用权限来进行权限判断的,而配置应 用的权限有两种方式:
● 当应用使用的元数据不多时,直接在元数据对象上配置权限。
● 当应用使用的元数据过多时,用业务凭证配置公共接口权限。
建议的权限机制
轻应用下的应用模板一般为轻量级应用,不涉及复杂化的代码,用户零代码(如拖拽 组件,简单配置)或者低代码就能轻松完成应用的搭建。并且一般轻应用使用的元数 据数量不多,所以在轻应用中,建议使用的权限机制是直接在元数据对象上配置权 限。
如何在元数据对象上配置权限
在元数据对象上配置权限,需要自定义对象模型,然后在自定义对象的自定义字段页 签中新建字段,并给这个字段配置权限 。
以新建一个“调查问卷”模板轻应用“B”为例:
步骤1 进入AppCube“首页>项目>轻应用”中,将鼠标放在调查问卷模板上,单击“使用模 板”,创建“调差问卷”模板轻应用“B”。
图1-75 调查问卷
步骤2 创建成功后,在“首页>项目”中,单击应用“B”进入应用开发页面。
步骤3 在应用开发界面中选中Model目录下的元数据对象
“B_questionnaireRecord__CST”,单击“自定义字段”页签。
说明
1. 若创建的是空白轻应用,需要手动创建数据对象。单击Model目录后的 后单击“对象”
进行创建。
图1-76 创建对象
2. 在创建的对象中进入“自定义字段”页签中,单击“新建”添加字段。
图1-77 自定义字段
步骤4 单击字段名称进入字段详情页面。
图1-78 字段详情
步骤5 在字段详情页面单击右上角的“设置字段权限”,进入字段权限配置。
图1-79 字段权限
步骤6 单个字段权限配置完成后,重复以上操作完成其他权限的配置。
说明
配置元数据权限也可以在AppCube的“管理>用户管理>权限配置”中进行配置。
配置方法:
1. 在AppCube中单击“管理>用户管理>权限配置”,进入权限配置列表。
图1-80 权限配置
2. 单击元数据对象需要配置的权限名称(如元数据对象“B_questionnaireRecord__CST”需要 配置的权限“csProfile”)进入权限配置详情页面。在详情页面中单击“自定义对象”页签 查看自定义对象。
图1-81 自定义对象
3. 单击需要配置权限的自定义对象名称,在弹出框中单击 后进行权限配置。
图1-82 权限配置
----结束
如何给接口添加业务权限凭证
若用户或者业务用户需要通过权限访问接口,需要给该接口添加业务权限凭证。以
“A”应用为例介绍如何给接口添加业务权限凭证。
步骤1 创建业务权限凭证。
以在“A”应用中添加业务用户业务权限凭证为例,创建1个业务凭证“cs”,即普通 业务用户业务凭证。
1. 在AppCube开发环境中,进入已创建的“A”应用中,单击“配置”。
2. 在“业务权限凭证”页签,单击“新建”。
图1-83 在应用中创建业务权限凭证
说明
在AppCube管理中心的“业务权限凭证”中,也可以单击“新建”创建业务权限凭证。如 果您已经在管理中心的“业务权限凭证”中创建了业务凭证,可直接单击图1-83的“导 入”,将已有的业务权限凭证导入当前应用中。
图1-84 在管理页面创建业务权限凭证
3. 在标签和名称输入框输入“cs”后,单击“保存”,完成“cs”普通业务用户业务 凭证的创建。
图1-85 新建业务权限凭证
步骤2 创建权限配置。
业务用户的权限主要是在AppCube预置的Portal User Profile权限基础上,进行自定义 业务用户权限配置和拓展实现的。在AppCube的权限配置功能中,基于某个权限配置 的新创建的Profile,将会继承原Profile的全部权限。在后续有新的业务用户注册时,
只需要为新的业务用户配置对应的权限,即可获取该权限配置中的权限。
以在“A”应用中创建普通业务用户权限“csProfile”为例。
1. 在AppCube开发环境首页,单击“管理”,进入管理中心。
2. 选择“用户管理 > 权限配置”,在右侧“权限配置列表”中,单击“新建”。
3. 在新建权限配置弹窗中,选择“现有权限配置”为“Portal User Profile”,选择
“普通克隆”,设置要新增的“权限配置名称”为“csProfile”,单击“保 存”。
图1-86 基于 Portal User Profile 新增权限配置
说明
选择继承克隆时,除基本信息和业务权限凭证,其余权限屏蔽编辑按钮。选择普通克隆时 则不会屏蔽编辑按钮。
图1-87 继承克隆屏蔽编辑按钮
4. 在权限配置列表中,单击“csProfile”,进入权限配置详情。
5. 在“基本信息”页签,单击“基本信息”右侧编辑按钮 ,可进行权限配置。
图1-88 权限配置
说明
这里的权限默认继承AppCube预置的Portal User Profile权限基础,具体权限配置可以根据 业务需要进行自由配置。
6. 单击“业务权限凭证”,在“业务权限凭证”下,勾选“cs”业务凭证,再单击
,保存设置。
图1-89 配置业务凭证权限
步骤3 配置业务用户权限。
在添加业务用户后,该业务用户是没有任何权限使用AppCube提供的服务的。若需要 该业务用户正常使用AppCube,则需要为该用户配置相关的使用权限。以在“A”应用 中通过脚本创建的“test_cs”业务用户为例。
1. 在AppCube开发环境首页,单击“管理”,进入管理中心。
2. 选择“用户管理 > 业务用户”,进入业务用户列表页面。
3. 在业务用户页面单击需要配置权限的业务用户“test_cs”,进入业务用户详情页 面。
4. 在业务用户详情页面单击“权限集”下的编辑按钮,在弹出框中选中左侧列表的
“csProfile”后,单击 将选中的权限添加至右侧列表,然后单击“保存”完成 权限的配置。
图1-90 权限配置窗口
说明
– “csProfile”是基于“Portal User Profile”创建的扩展权限集。除了“csProfile”权限 集,其他权限都是系统预置的权限集。对于系统预置的权限集,建议不进行修改,基于 系统预置的权限集创建的权限集(如“csProfile”)继承了系统预置的所有权限。
– 勾选“覆盖业务用户权限”时(单击“覆盖业务用户权限”后的编辑按钮可进行勾选操 作),该业务用户所有权限读取“权限集”中的权限设置;不勾选时,该业务用户应用 程序权限读取“Portal User Profile”设置,其余权限读取“权限集”中的权限设置。
图1-91 覆盖业务用户权限配置
----结束
1.6 行业应用建议的权限机制
什么是应用的权限机制
应用的权限机制是指应用是以何种方式来配置应用权限来进行权限判断的,而配置应 用的权限有两种方式:
1. 当应用使用的元数据不多时,直接在元数据对象上配置权限。
2. 当应用使用的元数据过多时,用业务凭证配置公共接口权限。
建议的权限机制
行业应用较轻应用而言,功能更加丰富,您可使用AppCube提供的各种能力组件,采 用低码或多码化模式开发应用。并且一般行业应用使用的元数据数量较多,按轻应用 中直接配置元数据权限会比较麻烦。所以建议使用业务凭证配置公共接口权限。
如何用业务凭证配置公共接口权限
在行业应用中,当需要给创建的公共接口添加业务凭证控制权限时,首先需要将接口 发布到外部网关,然后给接口添加业务凭证。
下面将以在1.1中创建的“A”应用为例介绍如何给公共接口添加业务权限凭证。
1. 在“我的应用”中,单击“A”应用,进入“A”应用开发界面。
2. 在“A”应用开发界面单击“配置>业务权限凭证”,进入应用配置的业务权限凭 证页面。
图1-92 业务权限凭证页面
3. 在应用配置的业务权限凭证页面,单击“导入”按钮,在弹出框中选择需要导入 的业务权限凭证后,单击“导入”按钮完成业务权限凭证的导入。
图1-93 导入业务权限凭证
说明
在“A”应用中选择导入业务权限凭证是因为在本章节如何给业务用户添加业务权限凭证 中已经创建了需要的“cs”业务凭证。如果之前还未创建需要的业务凭证,则可以在本页 面中单击“新建”按钮进行新建业务凭证,也可以参考如何给业务用户添加业务权限凭证 中步骤创建业务凭证。
4. 创建公共接口。
a. 在“A”应用的开发页面,单击下方“服务”,进入公共接口创建页面。
图1-94 服务入口
b. 在右侧“公共接口”下单击“新建”,创建“用户注册”脚本对应的公共接 口,详细接口信息如表1-10所示。
说明
脚本“registerPortalUser”在1.1中已创建,如果在“资源”下拉框中,未找到需要 关联的脚本,请检查相关脚本是否已启用。
表1-10 公共接口
设置操作 版本 URL 方法 类
型
资源
registerPortal
User 1.0.0 /
registerPortalU ser
POST 脚
本 命名空间
__registerPortalU ser
5. 在公共接口详情页单击业务权限凭证模块下的“编辑”按钮,在弹出框左侧列表 中选中需要添加的业务权限凭证后,单击 ,将选择的业务权限凭证添加至右侧 列表,单击“保存”按钮,完成业务权限凭证的添加。
图1-95 公共接口详情
图1-96 编辑业务权限凭证
6. 进入管理中心,选择“权限配置”菜单,查看需要配置业务权限凭证的权限详 情,点击“业务权限凭证”页签,将相应的业务权限凭证进行编辑,勾选“可接 入”选项。
图1-97 权限绑定业务权限凭证
注意
在以“A”应用为例的实例中权限绑定业务权限凭证的操作在如何给业务用户添加 业务权限凭证已经执行过,此处可不执行。
若没有执行过权限绑定业务权限凭证的操作,需要执行此步骤。
7. 在管理中心,选择“用户”菜单或“业务用户”菜单,对平台用户或业务用户配 置相应的权限,该用户即可获取调用相应API接口的权限,否则将无法通过API接 口的业务权限凭证校验。
注意
在以“A”应用为例的实例中,配置“业务用户”权限的操作在如何给业务用户添 加业务权限凭证已经执行过,此处可不执行。
若没有执行过配置“用户”或者“业务用户”权限操作,需要执行此步骤。