Commit e63772b2 by 蒋勇

d

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