门户提供的API
1 组织
1.1 维护组织和人员
uaa提供一个api:postOrgs,实现组织和人员的增删改
- URL
/entry/uaa/org/postOrgs
- 请求方式
POST
参数
{ "orgFNameSeparator": "/", //全路径名称分隔符,默认为/,可在参数配置中配置 "data": { "type": "delta", //取值范围: 增量(delta), 全量(all) "users": [ //用户信息 { "state": "upsert", //当type=delta时生效, delete/upsert。全量时不设置 "id": "", //主键 "orgs":[ "",""], //所属组织的id列表,和addOrgs/deleteOrgs不能同时出现 "addOrgs": [], //增加的组织id列表 "deleteOrgs": [], //删除的组织id列表 "mainOrg": "", //主组织的id "created": null, //创建时间 "username": "", //登录用户名 "name": "", //用户中文名称 "verified": 1, //账号状态 "active": 1, //用户状态 "email": "", //email "phoneNumber": "", //手机号 "address":"", //办公地址 "position": "", //职位 "description": "", //备注 "hiredate": "2021-07-21 00:00:00", //入职时间 "roles": ["", ""], //人员的角色id列表 "addRoles": ["", ""], //人员新增加的角色id列表 "deleteRoles": ["", ""], //删除的人员角色id列表 "orgRoles":[{"orgid": ["roleid"]}], //人员成员的角色id列表 "addOrgRoles": [{"orgid": ["roleid"]}], //人员成员新增加的角色id列表 "deleteOrgRoles": [{"orgid": ["roleid"]}], //删除的人员成员角色id列表 "sortNumber": 1, //排序号 "type": "org", //org代表组织内人员,sys代表system,外部人员无需设置 "manageOrgs": [{ //人员或人员成员的管理组织信息 "role": "roleid", //角色id,主管的角色id是director "org"; "orgid", //管理者是人员时设置为空,管理者是人员成员时设置为父节点的id "managedOrg": "orgid" //被管理组织的id }], "addManageOrgs": [], //内容同manageOrgs,表示新增加的管理组织信息 "deleteManageOrgs": [], //内容同manageOrgs,表示要删除的管理组织信息 "extend": {} //扩展表中的字段 } ], "orgs": [ { "state": "upsert", //当type=delta时生效, delete/upsert,全量时不设置 "id": "", //组织id "parentID": null, //父组织id "name": "", //组织名称 "code": "", //组织编码 "type": "", //组织类型:部门(dpt),机构(ogn),岗位(pos) "active": 1, //状态 "seq": 1, //序号 "roles": ["", ""], //拥有的角色id列表; "addRoles": ["", ""], //新增加的角色id列表 "deleteRoles": ["", ""],//删除的角色id列表 "manageOrgs": [{ //组织的管理组织信息 "role": "roleid", //角色id,主管的角色id是director "managedOrg": "orgid" //被管理组织的id }], "addManageOrgs": [], //内容同manageOrgs,表示新增加的管理组织信息 "deleteManageOrgs": [], //内容同manageOrgs,表示要删除的管理组织信息 "extend": {} //扩展表中的字段 } ] } }
案例
js调用api
Model.prototype.postOrgs=function((orgs,users){
var params = {
"data": {
"type": "delta",
"orgs": orgs,
"users": users
}
};
var dfd = $.Deferred();
$.ajax({
method : "POST",
url : "/entry/uaa/org/postOrgs",
headers : {
"X-Request-Service-Name" : "*",
"Content-type" : "application/json"
},
data : JSON.stringify(params)
}).then(function(data) {
if(data.success){
dfd.resolve(data);
}else{
dfd.reject(data.msg);
}
}, function(error) {
dfd.reject(error);
});
return dfd.promise();
}
java调用api
public void postOrgs(JSONArray orgs,JSONArray users){
JSONObject dataObj = new JSONObject();
dataObj.put("orgs", orgs);
dataObj.put("users", users);
dataObj.put("type", "delta");
JSONObject paramObj = new JSONObject();
paramObj.put("data", dataObj);
JSONObject ret = ServiceUtil.post(SpringWebUtil.getRequest(),"entry","/uaa/org/postOrgs",paramObj);
if(!ret.getBooleanValue("success")) {
throw new RuntimeException(ret.getString("msg"));
}
}
添加/修改一个组织
var orgs = [{
"id": orgData.getValue("id") || OpmUtils.createOpmUUID(),
"code" : orgData.getValue("code"),
"name" : orgData.getValue("name"),
"type" : orgData.getValue("type"),
"active" : orgData.getValue("active"),
"parentID": this.params.parentRow ? this.params.parentRow.val("id") : ""
}];
this.postOrgs(orgs).then(function(){
justep.Util.hint("保存成功"});
},function(error){
justep.Util.hint(error,{"type":"error"});
})
删除多个组织
var orgs = [];
$.each(rows, function(i, row) {
var id = row.val("id");
orgs.push({"state": "delete","id":id,"type":row.val("type")});
});
OpmUtils.postOrgs(orgs).then(function(){
justep.Util.hint("删除成功");
}, function(error) {
justep.Util.hint(error,{"type":"error"});
});
添加/修改一个人员
var orgs = [{
"id": parentID,
"code": parentCode,
"name": personData.getValue("posName"),
"type": "pos",
"parentID": deptID,
"addRoles": [posID]
}];
var users = [{
"id" : personData.getValue("id"),
"username" : personData.getValue("username"),
"name" : personData.getValue("name"),
"phoneNumber" : personData.getValue("phoneNumber"),
"email" : personData.getValue("email"),
"active" : personData.getValue("active"),
"verified" : personData.getValue("verified"),
"address" : personData.getValue("data9"),//地址
"position" : personData.getValue("data10"),//职位
"description" : personData.getValue("description"),//备注
"data15" : personData.getValue("data15"),//性别
"hiredate" : personData.getValue("data18"),//入职时间
"avatarUrl" : personData.getValue("avatarUrl"),//头像
"signature" : personData.getValue("signature"),//电子签名
"idcard" : personData.getValue("idcard")//身份证号
}];
if(this.params.userType!="external"){//组织内用户
users[0].mainOrg = parentID;
users[0].type = "org";
}
if(this.comp("configData").getValue("useUserSortNumber")==1){//人员序号
users[0].sortNumber = personData.getValue("sortNumber");
}
this.postOrgs(orgs,users).then(function(){
justep.Util.hint("保存成功"});
},function(error){
justep.Util.hint("保存失败!"+error,{"type":"error"});
})
删除多个人员
var users = [];
var rows = self.comp("personTable").getCheckeds();
$.each(rows, function(i, row){
var id = row.val("id");
users.push({"state": "delete","id":id});
});
this.postOrgs(null,users));
1.2 用户过期锁定
在统一通用配置的组织配置中,可以配置注册用户有效期、未登录账号冻结期限; 在统一通用配置的密码配置中,可以配置密码有效期。
门户opm服务模块的组织管理服务提供一个api:用户过期锁定。读取这三个配置项,根据设定的天数,将用户表中的用户状态active设置为0,密码必须修改passwd_change_required设置为1.
- URL
/entry/opm/orgmanager/lockoverdueusers
- 请求方式
POST
2 角色
2.1 获取拥有某个角色的组织
权限组件authorize提供一个api,获取拥有某个角色的组织
- URL
/entry/authorize/roles/code/角色code/subjects?direct=true&sort=description,asc
- 请求方式
GET
- 参数
url中的角色code
- 返回值
[
{
"id": , //授权记录id
"code": , //授权主体id,授权到组织,则为组织id,授权到人员成员,则为/父组织id/人员id
"name": , //授权主体code,对应组织和人员的code
"description": , //授权主体fname,对应组织和人员的fname
"role": {
"id": "modelAdmin", //角色id
"code": "modelAdmin", //角色code
"name": "模型管理员", //角色名称
"parentRoleCodes": "", //父角色code,多个父角色使用逗号分隔
"parentRoleNames": "", //父角色名称,多个父角色使用逗号分隔
},
"roleId": "modelAdmin" //角色id
}
]
- 案例
获取拥有模型管理员角色的组织,模型管理员角色的code为modelAdmin
/entry/authorize/roles/code/modelAdmin/subjects?direct=true&sort=description,asc
[
{
"id": "7552a46b9c0e4f83afe5b5476035cfc2",
"code": "/9ebd043d-ca11-4db9-afda-f649f1b0a3f1/62d8f697-d307-4e9d-8399-eff9fba64c41",
"name": "t13804070003",
"description": "/设计院/数字化中心/G3",
"role": {
"id": "modelAdmin",
"code": "modelAdmin",
"name": "模型管理员",
"parentRoleCodes": "",
"parentRoleNames": "",
},
"roleId": "modelAdmin"
},
{
"id": "682a70f79ce74c8197a15e926154c2e0",
"code": "/f15c6ab8-9355-4967-866a-7d416578ac37/0cbc85dc-7a42-427b-8c65-a212665983fa",
"name": "138",
"description": "/设计院/设计部/模管一",
"role": {
"id": "modelAdmin",
"code": "modelAdmin",
"name": "模型管理员",
"parentRoleCodes": "",
"parentRoleNames": "",
},
"roleId": "modelAdmin"
}
]
2.2 获取某个组织下拥有某个角色的人员
门户opm服务模块的组织权限服务提供一个api,获取某个组织下拥有某个角色的人员
- URL
/entry/opm/orgauth/queryorghasrole?roleId=&orgFid=
- 请求方式
GET
- 参数
roleId:角色的id orgFid:组织的fid
- 返回值
返回人员的id、姓名、全路径id、全路径名称和全路径编码的JSON数组
[
{
"id": "",
"name": "",
"fid": "",
"fname": "",
"fcode": ""
}
]
- 案例
获取开发部下拥有合同审批角色的人员。开发部的fid为/oDJaLi833XQoQQTS2fl.ogn/oDSYPbG33UYpIIg1BII.dpt,合同审批角色的id为oIFgHHe338T3G1pMIDe
/entry/opm/orgauth/queryorghasrole?roleId=oIFgHHe338T3G1pMIDe&orgFid=/oDJaLi833XQoQQTS2fl.ogn/oDSYPbG33UYpIIg1BII.dpt
[
{
"id": "oIzH99633STExJZmcv6",
"name": "a3",
"fid": "/oDJaLi833XQoQQTS2fl.ogn/oDSYPbG33UYpIIg1BII.dpt/oNyGkqQ33Bgprm0H31G.pos/oIzH99633STExJZmcv6.psm",
"fname": "/起步/开发部/经理/a3",
"fcode": "/oDJaLks33GL1SIyAWqo/oDSYPi833Kjn6bl9KIE/oNyGkso33LpnbJA128G/a3"
},
{
"id": "oEguYlO33r5rkrVuzRy",
"name": "aa",
"fid": "/oDJaLi833XQoQQTS2fl.ogn/oDSYPbG33UYpIIg1BII.dpt/oEguYlO33r5rkrVuzRy.psm",
"fname": "/起步/开发部/aa",
"fcode": "/oDJaLks33GL1SIyAWqo/oDSYPi833Kjn6bl9KIE/aa"
}
]
3 管理者
3.1 根据组织角色的设置获取管理者
门户opm服务模块的流程服务提供一个api,根据人员FID和角色code获取管理者
- URL
/entry/opm/flow/getmanagerbyrolecode
- 请求方式
GET
- 参数说明
getManagerByRoleCode(String personFID,String roleCode)
personFID:人员的fid
roleCode:角色code
3.2 获取部门主管
门户opm服务模块的流程服务提供一个api,根据人员FID获取第几级部门的主管
- URL
/entry/opm/flow/getdirector
- 请求方式
GET
- 参数说明
getDirector(String personFID,Integer level)
personFID:人员的fid
level:部门级别,1代表人员所在部门的主管,2代表上一级部门的主管,以此类推
4 使用方法
4.1 前端使用
在非门户应用中调用门户中的服务,方法如下
- 对于uaa和权限组件authorize提供的api,使用网络请求组件或js调用
- 对于opm服务模块提供的api,使用租户内跨应用调服务
租户内跨应用调服务
- 切换到高级页面
- 点击租户内跨应用调服务、数据后面的立即设置按钮,打开对话框
在对话框中显示非本应用的其他应用列表
- 选中entry应用的使用复选框
- 点击entry应用右侧的...按钮,打开对话框
- 选中其中的流程服务和组织管理服务
- 点确定按钮,再点关闭按钮,关闭对话框
打开需要调用门户服务的页面
- 在服务中可以看到流程服务和组织管理服务
- 将需要调用的服务添加到页面上,使用方法和在应用内创建的服务相同
4.2 后端使用
使用ServiceUtil的get或post方法,调用上面的服务
ServiceUtil.get(SpringWebUtil.getRequest(),"entry","/opm/flow/getmanagerbyrolecode",null); JSONObject ret = ServiceUtil.post(SpringWebUtil.getRequest(),"entry","/uaa/org/postOrgs",paramObj);