no message
This commit is contained in:
parent
f0aa757b79
commit
d30c07b0aa
2 changed files with 127 additions and 216 deletions
|
|
@ -33,13 +33,102 @@ export class PermissionController extends Controller {
|
||||||
private redis = require("redis");
|
private redis = require("redis");
|
||||||
|
|
||||||
@Get("")
|
@Get("")
|
||||||
public async getPermission(@Request() request: RequestWithUser) {
|
public async getPermission(@Request() request: { user: Record<string, any> }) {
|
||||||
let data = this.getPermissionFunc(request);
|
const orgRevision = await this.orgRevisionRepository.findOne({
|
||||||
return new HttpSuccess(data);
|
select: ["id"],
|
||||||
|
where: {
|
||||||
|
orgRevisionIsDraft: false,
|
||||||
|
orgRevisionIsCurrent: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const redisClient = await this.redis.createClient({
|
||||||
|
host: REDIS_HOST,
|
||||||
|
port: REDIS_PORT,
|
||||||
|
});
|
||||||
|
const getAsync = promisify(redisClient.get).bind(redisClient);
|
||||||
|
|
||||||
|
let profileType = "OFFICER";
|
||||||
|
let profile: any = await this.profileRepo.findOne({
|
||||||
|
select: ["id"],
|
||||||
|
where: { keycloak: request.user.sub },
|
||||||
|
});
|
||||||
|
if (!profile) {
|
||||||
|
profileType = "EMPLOYEE";
|
||||||
|
profile = await this.profileEmployeeRepo.findOne({
|
||||||
|
select: ["id"],
|
||||||
|
where: { keycloak: request.user.sub },
|
||||||
|
});
|
||||||
|
if (!profile) {
|
||||||
|
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let reply = await getAsync("role_" + profile.id);
|
||||||
|
if (reply != null) {
|
||||||
|
reply = JSON.parse(reply);
|
||||||
|
} else {
|
||||||
|
let posMaster: any = await this.posMasterRepository.findOne({
|
||||||
|
select: ["authRoleId"],
|
||||||
|
where: {
|
||||||
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
|
orgRevisionId: orgRevision?.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (!posMaster) {
|
||||||
|
posMaster = await this.posMasterEmpRepository.findOne({
|
||||||
|
select: ["authRoleId"],
|
||||||
|
where: {
|
||||||
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
|
orgRevisionId: orgRevision?.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (!posMaster) {
|
||||||
|
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลสิทธิ์");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getDetail = await this.authRoleRepo.findOne({
|
||||||
|
select: ["id", "roleName", "roleDescription"],
|
||||||
|
where: { id: posMaster.authRoleId },
|
||||||
|
});
|
||||||
|
if (!getDetail) {
|
||||||
|
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
|
||||||
|
}
|
||||||
|
|
||||||
|
const roleAttrData = await this.authRoleAttrRepo.find({
|
||||||
|
select: [
|
||||||
|
"authSysId",
|
||||||
|
"parentNode",
|
||||||
|
"attrOwnership",
|
||||||
|
"attrIsCreate",
|
||||||
|
"attrIsList",
|
||||||
|
"attrIsGet",
|
||||||
|
"attrIsUpdate",
|
||||||
|
"attrIsDelete",
|
||||||
|
"attrPrivilege",
|
||||||
|
],
|
||||||
|
where: { authRoleId: getDetail.id },
|
||||||
|
});
|
||||||
|
|
||||||
|
reply = {
|
||||||
|
...getDetail,
|
||||||
|
roles: roleAttrData,
|
||||||
|
};
|
||||||
|
redisClient.setex("role_" + profile.id, 86400, JSON.stringify(reply));
|
||||||
|
}
|
||||||
|
return new HttpSuccess(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("menu")
|
@Get("menu")
|
||||||
public async listAuthSys(@Request() request: RequestWithUser) {
|
public async listAuthSys(@Request() request: { user: Record<string, any> }) {
|
||||||
const orgRevision = await this.orgRevisionRepository.findOne({
|
const orgRevision = await this.orgRevisionRepository.findOne({
|
||||||
select: ["id"],
|
select: ["id"],
|
||||||
where: {
|
where: {
|
||||||
|
|
@ -77,6 +166,10 @@ export class PermissionController extends Controller {
|
||||||
select: ["authRoleId"],
|
select: ["authRoleId"],
|
||||||
where: {
|
where: {
|
||||||
current_holderId: profile.id,
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
orgRevisionId: orgRevision?.id,
|
orgRevisionId: orgRevision?.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -85,6 +178,10 @@ export class PermissionController extends Controller {
|
||||||
select: ["authRoleId"],
|
select: ["authRoleId"],
|
||||||
where: {
|
where: {
|
||||||
current_holderId: profile.id,
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
orgRevisionId: orgRevision?.id,
|
orgRevisionId: orgRevision?.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -303,100 +400,6 @@ export class PermissionController extends Controller {
|
||||||
|
|
||||||
@Get("user/{id}")
|
@Get("user/{id}")
|
||||||
public async listOrgUser(@Request() request: RequestWithUser, @Path() id: string) {
|
public async listOrgUser(@Request() request: RequestWithUser, @Path() id: string) {
|
||||||
const redisClient = await this.redis.createClient({
|
|
||||||
host: REDIS_HOST,
|
|
||||||
port: REDIS_PORT,
|
|
||||||
});
|
|
||||||
const getAsync = promisify(redisClient.get).bind(redisClient);
|
|
||||||
|
|
||||||
let reply = await getAsync("user_" + id);
|
|
||||||
if (reply != null) {
|
|
||||||
reply = JSON.parse(reply);
|
|
||||||
} else {
|
|
||||||
const orgRevision = await this.orgRevisionRepository.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: {
|
|
||||||
orgRevisionIsDraft: false,
|
|
||||||
orgRevisionIsCurrent: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
let profileType = "OFFICER";
|
|
||||||
let profile: any = await this.profileRepo.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: { id: id },
|
|
||||||
});
|
|
||||||
if (!profile) {
|
|
||||||
profileType = "EMPLOYEE";
|
|
||||||
profile = await this.profileEmployeeRepo.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: { id: id },
|
|
||||||
});
|
|
||||||
if (!profile) {
|
|
||||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (profileType == "OFFICER") {
|
|
||||||
const posMaster = await this.posMasterRepository.findOne({
|
|
||||||
where: {
|
|
||||||
current_holderId: profile.id,
|
|
||||||
orgRevisionId: orgRevision?.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (!posMaster) {
|
|
||||||
reply = {
|
|
||||||
orgRootId: null,
|
|
||||||
orgChild1Id: null,
|
|
||||||
orgChild2Id: null,
|
|
||||||
orgChild3Id: null,
|
|
||||||
orgChild4Id: null,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
reply = {
|
|
||||||
orgRootId: posMaster.orgRootId,
|
|
||||||
orgChild1Id: posMaster.orgChild1Id,
|
|
||||||
orgChild2Id: posMaster.orgChild2Id,
|
|
||||||
orgChild3Id: posMaster.orgChild3Id,
|
|
||||||
orgChild4Id: posMaster.orgChild4Id,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
redisClient.setex("user_" + profile.id, 86400, JSON.stringify(reply));
|
|
||||||
} else {
|
|
||||||
const posMaster = await this.posMasterEmpRepository.findOne({
|
|
||||||
where: {
|
|
||||||
current_holderId: profile.id,
|
|
||||||
orgRevisionId: orgRevision?.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (!posMaster) {
|
|
||||||
reply = {
|
|
||||||
orgRootId: null,
|
|
||||||
orgChild1Id: null,
|
|
||||||
orgChild2Id: null,
|
|
||||||
orgChild3Id: null,
|
|
||||||
orgChild4Id: null,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
reply = {
|
|
||||||
orgRootId: posMaster.orgRootId,
|
|
||||||
orgChild1Id: posMaster.orgChild1Id,
|
|
||||||
orgChild2Id: posMaster.orgChild2Id,
|
|
||||||
orgChild3Id: posMaster.orgChild3Id,
|
|
||||||
orgChild4Id: posMaster.orgChild4Id,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
redisClient.setex("user_" + profile.id, 86400, JSON.stringify(reply));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HttpSuccess(reply);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Get("org/{action}/{system}")
|
|
||||||
public async listAuthSysOrgSystem(
|
|
||||||
@Request() request: RequestWithUser,
|
|
||||||
@Path() action: string,
|
|
||||||
@Path() system: string,
|
|
||||||
) {
|
|
||||||
const orgRevision = await this.orgRevisionRepository.findOne({
|
const orgRevision = await this.orgRevisionRepository.findOne({
|
||||||
select: ["id"],
|
select: ["id"],
|
||||||
where: {
|
where: {
|
||||||
|
|
@ -413,28 +416,31 @@ export class PermissionController extends Controller {
|
||||||
let profileType = "OFFICER";
|
let profileType = "OFFICER";
|
||||||
let profile: any = await this.profileRepo.findOne({
|
let profile: any = await this.profileRepo.findOne({
|
||||||
select: ["id"],
|
select: ["id"],
|
||||||
where: { keycloak: request.user.sub },
|
where: { id: id },
|
||||||
});
|
});
|
||||||
if (!profile) {
|
if (!profile) {
|
||||||
profileType = "EMPLOYEE";
|
profileType = "EMPLOYEE";
|
||||||
profile = await this.profileEmployeeRepo.findOne({
|
profile = await this.profileEmployeeRepo.findOne({
|
||||||
select: ["id"],
|
select: ["id"],
|
||||||
where: { keycloak: request.user.sub },
|
where: { id: id },
|
||||||
});
|
});
|
||||||
if (!profile) {
|
if (!profile) {
|
||||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let reply = await getAsync("posMaster_" + profile.id);
|
let reply = await getAsync("user_" + profile.id);
|
||||||
if (reply != null) {
|
if (reply != null) {
|
||||||
reply = JSON.parse(reply);
|
reply = JSON.parse(reply);
|
||||||
} else {
|
} else {
|
||||||
let privilege = this.Permission(request, system.toLocaleUpperCase(), action);
|
|
||||||
if (profileType == "OFFICER") {
|
if (profileType == "OFFICER") {
|
||||||
const posMaster = await this.posMasterRepository.findOne({
|
const posMaster = await this.posMasterRepository.findOne({
|
||||||
where: {
|
where: {
|
||||||
current_holderId: profile.id,
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
orgRevisionId: orgRevision?.id,
|
orgRevisionId: orgRevision?.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -445,7 +451,6 @@ export class PermissionController extends Controller {
|
||||||
orgChild2Id: null,
|
orgChild2Id: null,
|
||||||
orgChild3Id: null,
|
orgChild3Id: null,
|
||||||
orgChild4Id: null,
|
orgChild4Id: null,
|
||||||
privilege: privilege,
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
reply = {
|
reply = {
|
||||||
|
|
@ -454,14 +459,17 @@ export class PermissionController extends Controller {
|
||||||
orgChild2Id: posMaster.orgChild2Id,
|
orgChild2Id: posMaster.orgChild2Id,
|
||||||
orgChild3Id: posMaster.orgChild3Id,
|
orgChild3Id: posMaster.orgChild3Id,
|
||||||
orgChild4Id: posMaster.orgChild4Id,
|
orgChild4Id: posMaster.orgChild4Id,
|
||||||
privilege: privilege,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
redisClient.setex("posMaster_" + profile.id, 86400, JSON.stringify(reply));
|
redisClient.setex("user_" + profile.id, 86400, JSON.stringify(reply));
|
||||||
} else {
|
} else {
|
||||||
const posMaster = await this.posMasterEmpRepository.findOne({
|
const posMaster = await this.posMasterEmpRepository.findOne({
|
||||||
where: {
|
where: {
|
||||||
current_holderId: profile.id,
|
current_holderId: profile.id,
|
||||||
|
// orgRevision: {
|
||||||
|
// orgRevisionIsDraft: false,
|
||||||
|
// orgRevisionIsCurrent: true,
|
||||||
|
// },
|
||||||
orgRevisionId: orgRevision?.id,
|
orgRevisionId: orgRevision?.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -472,7 +480,6 @@ export class PermissionController extends Controller {
|
||||||
orgChild2Id: null,
|
orgChild2Id: null,
|
||||||
orgChild3Id: null,
|
orgChild3Id: null,
|
||||||
orgChild4Id: null,
|
orgChild4Id: null,
|
||||||
privilege: privilege,
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
reply = {
|
reply = {
|
||||||
|
|
@ -481,119 +488,12 @@ export class PermissionController extends Controller {
|
||||||
orgChild2Id: posMaster.orgChild2Id,
|
orgChild2Id: posMaster.orgChild2Id,
|
||||||
orgChild3Id: posMaster.orgChild3Id,
|
orgChild3Id: posMaster.orgChild3Id,
|
||||||
orgChild4Id: posMaster.orgChild4Id,
|
orgChild4Id: posMaster.orgChild4Id,
|
||||||
privilege: privilege,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
redisClient.setex("posMaster_" + profile.id, 86400, JSON.stringify(reply));
|
redisClient.setex("user_" + profile.id, 86400, JSON.stringify(reply));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HttpSuccess(reply);
|
return new HttpSuccess(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getPermissionFunc(@Request() request: RequestWithUser) {
|
|
||||||
const orgRevision = await this.orgRevisionRepository.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: {
|
|
||||||
orgRevisionIsDraft: false,
|
|
||||||
orgRevisionIsCurrent: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const redisClient = await this.redis.createClient({
|
|
||||||
host: REDIS_HOST,
|
|
||||||
port: REDIS_PORT,
|
|
||||||
});
|
|
||||||
const getAsync = promisify(redisClient.get).bind(redisClient);
|
|
||||||
|
|
||||||
let profile: any = await this.profileRepo.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: { keycloak: request.user.sub },
|
|
||||||
});
|
|
||||||
if (!profile) {
|
|
||||||
profile = await this.profileEmployeeRepo.findOne({
|
|
||||||
select: ["id"],
|
|
||||||
where: { keycloak: request.user.sub },
|
|
||||||
});
|
|
||||||
if (!profile) {
|
|
||||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let reply = await getAsync("role_" + profile.id);
|
|
||||||
if (reply != null) {
|
|
||||||
reply = JSON.parse(reply);
|
|
||||||
} else {
|
|
||||||
let posMaster: any = await this.posMasterRepository.findOne({
|
|
||||||
select: ["authRoleId"],
|
|
||||||
where: {
|
|
||||||
current_holderId: profile.id,
|
|
||||||
orgRevisionId: orgRevision?.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (!posMaster) {
|
|
||||||
posMaster = await this.posMasterEmpRepository.findOne({
|
|
||||||
select: ["authRoleId"],
|
|
||||||
where: {
|
|
||||||
current_holderId: profile.id,
|
|
||||||
orgRevisionId: orgRevision?.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (!posMaster) {
|
|
||||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลสิทธิ์");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getDetail = await this.authRoleRepo.findOne({
|
|
||||||
select: ["id", "roleName", "roleDescription"],
|
|
||||||
where: { id: posMaster.authRoleId },
|
|
||||||
});
|
|
||||||
if (!getDetail) {
|
|
||||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
|
|
||||||
}
|
|
||||||
|
|
||||||
const roleAttrData = await this.authRoleAttrRepo.find({
|
|
||||||
select: [
|
|
||||||
"authSysId",
|
|
||||||
"parentNode",
|
|
||||||
"attrOwnership",
|
|
||||||
"attrIsCreate",
|
|
||||||
"attrIsList",
|
|
||||||
"attrIsGet",
|
|
||||||
"attrIsUpdate",
|
|
||||||
"attrIsDelete",
|
|
||||||
"attrPrivilege",
|
|
||||||
],
|
|
||||||
where: { authRoleId: getDetail.id },
|
|
||||||
});
|
|
||||||
|
|
||||||
reply = {
|
|
||||||
...getDetail,
|
|
||||||
roles: roleAttrData,
|
|
||||||
};
|
|
||||||
redisClient.setex("role_" + profile.id, 86400, JSON.stringify(reply));
|
|
||||||
}
|
|
||||||
return reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Permission(request: RequestWithUser, system: string, action: string) {
|
|
||||||
if (
|
|
||||||
request.headers.hasOwnProperty("api_key") &&
|
|
||||||
request.headers["api_key"] &&
|
|
||||||
request.headers["api_key"] == process.env.API_KEY
|
|
||||||
) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
let data: any = this.getPermissionFunc(request);
|
|
||||||
let permission = false;
|
|
||||||
let role = data.roles.find((x: any) => x.authSysId == system);
|
|
||||||
if (!role) throw "ไม่มีสิทธิ์เข้าระบบ";
|
|
||||||
if (role.attrOwnership == "OWNER") return "OWNER";
|
|
||||||
if (action.trim().toLocaleUpperCase() == "CREATE") permission = role.attrIsCreate;
|
|
||||||
if (action.trim().toLocaleUpperCase() == "DELETE") permission = role.attrIsDelete;
|
|
||||||
if (action.trim().toLocaleUpperCase() == "GET") permission = role.attrIsGet;
|
|
||||||
if (action.trim().toLocaleUpperCase() == "LIST") permission = role.attrIsList;
|
|
||||||
if (action.trim().toLocaleUpperCase() == "UPDATE") permission = role.attrIsUpdate;
|
|
||||||
if (permission == false) throw "ไม่มีสิทธิ์ใช้งานระบบนี้";
|
|
||||||
return role.attrPrivilege;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,9 +45,20 @@ class CheckAuth {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return await new CallAPI()
|
return await new CallAPI()
|
||||||
.GetData(req, `/org/permission/org/${action}/${system}`)
|
.GetData(req, "/org/permission/org")
|
||||||
.then(async (x) => {
|
.then(async (x) => {
|
||||||
let privilege = x.privilege;
|
let privilege = null;
|
||||||
|
if (action.trim().toLocaleUpperCase() == "CREATE")
|
||||||
|
privilege = await this.PermissionCreate(req, system);
|
||||||
|
if (action.trim().toLocaleUpperCase() == "DELETE")
|
||||||
|
privilege = await this.PermissionDelete(req, system);
|
||||||
|
if (action.trim().toLocaleUpperCase() == "GET")
|
||||||
|
privilege = await this.PermissionGet(req, system);
|
||||||
|
if (action.trim().toLocaleUpperCase() == "LIST")
|
||||||
|
privilege = await this.PermissionList(req, system);
|
||||||
|
if (action.trim().toLocaleUpperCase() == "UPDATE")
|
||||||
|
privilege = await this.PermissionUpdate(req, system);
|
||||||
|
|
||||||
let data: any = {
|
let data: any = {
|
||||||
root: [null],
|
root: [null],
|
||||||
child1: [null],
|
child1: [null],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue