Commit e63772b2 by 蒋勇

d

parent 81cca563
...@@ -15,7 +15,8 @@ class APIBase{ ...@@ -15,7 +15,8 @@ class APIBase{
companyid:custtags[0].split("_")[1], companyid:custtags[0].split("_")[1],
password:custtags[1].split("_")[1], password:custtags[1].split("_")[1],
username:req.headers["x-consumer-username"], username:req.headers["x-consumer-username"],
credid:req.headers["x-credential-identifier"] credid:req.headers["x-credential-identifier"],
companykey:req.headers["x-company-key"],
} }
var rtn = await this[methodname](pobj, query, req); var rtn = await this[methodname](pobj, query, req);
return rtn; return rtn;
......
...@@ -27,11 +27,12 @@ class CtlBase { ...@@ -27,11 +27,12 @@ class CtlBase {
async setContextParams(pobj, qobj, req) { async setContextParams(pobj, qobj, req) {
let custtags = req.headers["x-consumetag"]?req.headers["x-consumetag"].split("|"):null; let custtags = req.headers["x-consumetag"]?req.headers["x-consumetag"].split("|"):null;
req.xctx = { req.xctx = {
appkey: req.headers["x-appkey"], appkey: req.headers["x-app-key"],
companyid: custtags?custtags[0].split("_")[1]:null, companyid: custtags?custtags[0].split("_")[1]:null,
password: custtags?custtags[1].split("_")[1]:null, password: custtags?custtags[1].split("_")[1]:null,
username: req.headers["x-consumer-username"], username: req.headers["x-consumer-username"],
credid: req.headers["x-credential-identifier"] credid: req.headers["x-credential-identifier"],
companykey:req.headers["x-company-key"],
} }
} }
async doexec(methodname, pobj, query, req) { async doexec(methodname, pobj, query, req) {
......
...@@ -17,39 +17,82 @@ class UserCtl extends CtlBase { ...@@ -17,39 +17,82 @@ class UserCtl extends CtlBase {
//获取验证码,发送给指定手机 //获取验证码,发送给指定手机
async sendVCode(pobj, qobj, req) { async sendVCode(pobj, qobj, req) {
var mobile = pobj.mobile; var mobile = pobj.mobile;
let v=await this.smsS.sendVCode(mobile); let v = await this.smsS.sendVCode(mobile);
return system.getResult({ vcodestr: v }); return system.getResult({ vcodestr: v });
} }
async exit(pobj, qobj, req) { async exit(pobj, qobj, req) {
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
p.companykey = req.xctx.companykey;
if (!p.companykey) {
return system.getResult(null, "自有用户创建需要提供公司KEY");
}
p.rolecode = "pr";
let rtn = await this.service.pmregisterByFreeUser(p, q);
return rtn;
} }
//注册时,分为两种类型,一种是普通pr,一种是租户
//登录后的租户创建属于租户的用户
//需要在控制器里取出公司ID
//和租户绑定同一家公司
//按照用户名和密码进行注册
//控制器端检查用户名和密码非空
async registerByTantent(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
p.company_id = req.xctx.companyid;
let rtn = await this.service.registerByTantent(p, q);
return rtn;
}
//租户用户名和密码的租户注册
async pmregister(pobj, qobj, req) { async pmregister(pobj, qobj, req) {
//平台注册设置平台的应用ID //平台注册设置平台的应用ID
pobj.app_id=settings.pmappid; pobj.app_id = settings.pmappid;
var rtn=await this.service.pmregister(pobj);
return system.getResult(rtn); //检查是否有用户名和密码
} if (!pobj.userName || !pobj.password) {
async create(pobj, queryobj, req) { return system.getResult(null, "请检查用户名和密码是否存在")
var rtn=await this.service.register(pobj); }
var rtn = await this.service.pmregister(pobj);
return system.getResult(rtn); return system.getResult(rtn);
} }
async pmlogin(pobj, qobj, req) { async pmlogin(pobj, qobj, req) {
//平台注册设置平台的应用ID //平台注册设置平台的应用ID
let rtn=await this.service.pmlogin(pobj, qobj,req); let rtn = await this.service.pmlogin(pobj, qobj, req);
return system.getResult(rtn); return system.getResult(rtn);
} }
async getUserInfo(pobj, qobj, req){ async getUserInfo(pobj, qobj, req) {
let uname=req.xctx.username; let uname = req.xctx.username;
let rtn=await this.service.getUserInfo(uname); let rtn = await this.service.getUserInfo(uname);
return system.getResult(rtn); return system.getResult(rtn);
} }
async pmloginByVCode(pobj, qobj, req){
let rtn=this.service.pmloginByVCode(pobj, qobj); //按照电话创建自由用户
async pmloginByVCodeForFreeUser(p, q, req) {
if (!pobj.mobile || !pobj.vcode) {
return system.getResult(null, "请检查手机号和验证码是否存在")
}
p.companykey = req.xctx.companykey;
if (!p.companykey) {
return system.getResult(null, "自有用户创建需要提供公司KEY");
}
let rtn = await this.service.pmloginByVCodeForFreeUser(p, q);
return rtn;
}
async pmloginByVCode(pobj, qobj, req) {
let rtn = this.service.pmloginByVCode(pobj, qobj);
return system.getResult(rtn); return system.getResult(rtn);
} }
async pmSendVCode(pobj, qobj,req){ async pmSendVCode(pobj, qobj, req) {
let rtn=await this.service.sendVCode(pobj, qobj); let rtn = await this.service.sendVCode(pobj, qobj);
return system.getResult(rtn); return system.getResult(rtn);
} }
} }
......
...@@ -9,14 +9,27 @@ class UserService extends ServiceBase { ...@@ -9,14 +9,27 @@ class UserService extends ServiceBase {
this.roleDao = system.getObject("db.auth.roleDao"); this.roleDao = system.getObject("db.auth.roleDao");
} }
//注册时,必须指定注册类型--租户或者普通用户 //登录后的租户创建属于租户的用户
//平台注册,默认角色,不具备平台级别的管理或运营功能 //需要在控制器里取出公司ID
//注册接口 //和租户绑定同一家公司
//封装kongurl //按照用户名和密码进行注册
//前端需要选择用户类型,如果企业用户,那么就设置角色为租户 //控制器端检查用户名和密码非空
//如果是个人类型,那么就设置角色为普通 async registerByTantent(p,q){
//注册成功返回租户公司或个人所属租户的companykey p.rolecode="pr";
//注册有两种类型,一种是租户注册,一种是租户帮助个人注册,需要传递公司的key let rtn= await this.pmregister(p,q)
return rtn;
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p,q){
p.rolecode="pr";
let rtn= await this.pmregister(p,q)
return rtn;
}
//平台租户注册接口方法
//控制器端检查用户名和密码非空
async pmregister(p, q) { async pmregister(p, q) {
var self = this; var self = this;
let tmppwd = p.password; let tmppwd = p.password;
...@@ -24,6 +37,9 @@ class UserService extends ServiceBase { ...@@ -24,6 +37,9 @@ class UserService extends ServiceBase {
tmppwd = settings.defaultpwd; tmppwd = settings.defaultpwd;
} }
p.password = this.getEncryptStr(tmppwd); p.password = this.getEncryptStr(tmppwd);
if(!p.nickName){
p.nickName=p.userName;
}
return this.db.transaction(async function (t) { return this.db.transaction(async function (t) {
//对于租户类型注册,创建一个默认公司,公司名称xxxx的公司 //对于租户类型注册,创建一个默认公司,公司名称xxxx的公司
//如果非租户类型,需要按照传递进来的公司companykey,来查询公司,按照companykey缓存到redis //如果非租户类型,需要按照传递进来的公司companykey,来查询公司,按照companykey缓存到redis
...@@ -33,12 +49,13 @@ class UserService extends ServiceBase { ...@@ -33,12 +49,13 @@ class UserService extends ServiceBase {
let cmp = await self.companyDao.create({ name: p.userName + "的公司", companykey: cmpkey }, t); let cmp = await self.companyDao.create({ name: p.userName + "的公司", companykey: cmpkey }, t);
p.company_id = cmp.id; p.company_id = cmp.id;
} else { } else {
cmpkey = p.companykey;//否则是租户协助创建个人访客,采用租户获得的公司key if(!p.company_id){
//按照公司key,获取公司 to do cache cmpkey = p.companykey;//否则是租户协助创建个人访客,采用租户获得的公司key
let compfind = await self.companyDao.model.findOne({ where: { companykey: cmpkey }, transaction: t }) //按照公司key,获取公司 to do cache
p.company_id = compfind.id; let compfind = await self.companyDao.model.findOne({ where: { companykey: cmpkey }, transaction: t })
p.company_id = compfind.id;
}
} }
let u = await self.dao.create(p, t) let u = await self.dao.create(p, t)
//设置默认角色,租户 //设置默认角色,租户
//设置默认普通角色,由于有了租户概念,所以注册时,需要知道当前租户和应用的id 才可以设置默认角色 todo //设置默认普通角色,由于有了租户概念,所以注册时,需要知道当前租户和应用的id 才可以设置默认角色 todo
...@@ -111,7 +128,16 @@ class UserService extends ServiceBase { ...@@ -111,7 +128,16 @@ class UserService extends ServiceBase {
}); });
return userfind; return userfind;
} }
//平台注册与登录
//自由用户的电话登录和注册
//需要存在公司KEY
async pmloginByVCodeForFreeUser(p,q){
p.rolecode="pr"
let rtn=await this.pmloginByVCode(p,q,req)
return system.getResult(rtn);
}
//平台租户注册与登录
//用户验证码登录 //用户验证码登录
// //
async pmloginByVCode(p, q, req) { async pmloginByVCode(p, q, req) {
...@@ -138,7 +164,7 @@ class UserService extends ServiceBase { ...@@ -138,7 +164,7 @@ class UserService extends ServiceBase {
return rtn; return rtn;
} else { } else {
//先按照用户名查续身份信息,获取key,secret, //先按照用户名查续身份信息,获取key,secret,
let u = await this.pmregister({ userName: mobile, nickName: mobile }); let u = await this.pmregister({ userName: mobile, nickName: mobile,rolecode:p.rolecode,companykey:p.companykey});
let token = await this.cmakejwt(u.jwtkey, u.jwtsecret, null); let token = await this.cmakejwt(u.jwtkey, u.jwtsecret, null);
rtn.token = token; rtn.token = token;
rtn.user = u; rtn.user = u;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment