From 3170b1ccf9dcaca868d14bc980a9274d87978740 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Wed, 7 Aug 2024 16:15:16 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=84=E0=B9=89?= =?UTF-8?q?=E0=B8=99=E0=B8=AB=E0=B8=B2=E0=B8=84=E0=B8=99=E0=B9=83=E0=B8=99?= =?UTF-8?q?=E0=B9=82=E0=B8=84=E0=B8=A3=E0=B8=87=E0=B8=AA=E0=B8=A3=E0=B9=89?= =?UTF-8?q?=E0=B8=B2=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/OrganizationController.ts | 320 +++++++++++----------- src/interfaces/permission.ts | 58 ++++ 2 files changed, 217 insertions(+), 161 deletions(-) create mode 100644 src/interfaces/permission.ts diff --git a/src/controllers/OrganizationController.ts b/src/controllers/OrganizationController.ts index 313eec9b..6d639914 100644 --- a/src/controllers/OrganizationController.ts +++ b/src/controllers/OrganizationController.ts @@ -1759,124 +1759,125 @@ export class OrganizationController extends Controller { */ @Get("org-chart/{revisionId}") async orgchart(@Path() revisionId: string) { - const data = await this.orgRevisionRepository.findOne({ - where: { id: revisionId } + where: { id: revisionId }, }); if (!data) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง"); } - let posMasterRoot:any; - let posMasterChild1:any; - let posMasterChild2:any; - let posMasterChild3:any; - let posMasterChild4:any; - if(data.orgRevisionIsCurrent == true && data.orgRevisionIsDraft == false) { + let posMasterRoot: any; + let posMasterChild1: any; + let posMasterChild2: any; + let posMasterChild3: any; + let posMasterChild4: any; + if (data.orgRevisionIsCurrent == true && data.orgRevisionIsDraft == false) { posMasterRoot = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild1Id: IsNull(), - current_holderId: Not(IsNull()) + current_holderId: Not(IsNull()), }, - relations:["current_holder", "orgRoot",] + relations: ["current_holder", "orgRoot"], }); posMasterChild1 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild2Id: IsNull(), orgChild1Id: Not(IsNull()), - current_holderId: Not(IsNull()) + current_holderId: Not(IsNull()), }, - relations:["current_holder", "orgChild1"] + relations: ["current_holder", "orgChild1"], }); posMasterChild2 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild3Id: IsNull(), orgChild2Id: Not(IsNull()), - current_holderId: Not(IsNull()) + current_holderId: Not(IsNull()), }, - relations:["current_holder", "orgChild2"] + relations: ["current_holder", "orgChild2"], }); posMasterChild3 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild4Id: IsNull(), orgChild3Id: Not(IsNull()), - current_holderId: Not(IsNull()) + current_holderId: Not(IsNull()), }, - relations:["current_holder", "orgChild3"] + relations: ["current_holder", "orgChild3"], }); posMasterChild4 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild4Id: Not(IsNull()), - current_holderId: Not(IsNull()) + current_holderId: Not(IsNull()), }, - relations:["current_holder", "orgChild4"] + relations: ["current_holder", "orgChild4"], }); let formattedData = posMasterRoot - .filter((x:any) => x.current_holderId !=null) - .map((x0:PosMaster) => ({ - personID: x0.current_holder.id, - name: x0.current_holder.firstName, - avatar: x0.current_holder.avatar, - positionName: x0.current_holder.position, - positionNum: x0.orgRoot.orgRootShortName+x0.posMasterNo, - positionNumInt: x0.posMasterNo, - departmentName: x0.orgRoot.orgRootName, - organizationId: x0.orgRoot.id, - children: posMasterChild1 - .filter((x:any) => x.current_holderId !=null && x.orgRootId == x0.orgRootId) - .map((x1:PosMaster) =>({ - personID: x1.current_holder.id, - name: x1.current_holder.firstName, - avatar: x1.current_holder.avatar, - positionName: x1.current_holder.position, - positionNum: x1.orgChild1.orgChild1ShortName+x1.posMasterNo, - positionNumInt: x1.posMasterNo, - departmentName: x1.orgChild1.orgChild1Name, - organizationId: x1.orgChild1.id, - children: posMasterChild2 - .filter((x:any) => x.current_holderId !=null && x.child1Id == x1.orgChild1Id) - .map((x2:PosMaster) =>({ - personID: x2.current_holder.id, - name: x2.current_holder.firstName, - avatar: x2.current_holder.avatar, - positionName: x2.current_holder.position, - positionNum: x2.orgChild2.orgChild2ShortName+x2.posMasterNo, - positionNumInt: x2.posMasterNo, - departmentName: x2.orgChild2.orgChild2Name, - organizationId: x2.orgChild2.id, - children: posMasterChild3 - .filter((x:any) => x.current_holderId !=null && x.child2Id == x2.orgChild2Id) - .map((x3:PosMaster) =>({ - personID: x3.current_holder.id, - name: x3.current_holder.firstName, - avatar: x3.current_holder.avatar, - positionName: x3.current_holder.position, - positionNum: x3.orgChild3.orgChild3ShortName+x3.posMasterNo, - positionNumInt: x3.posMasterNo, - departmentName: x3.orgChild3.orgChild3Name, - organizationId: x3.orgChild3.id, - children: posMasterChild4 - .filter((x:any) => x.current_holderId !=null && x.child3Id == x3.orgChild3Id) - .map((x4:PosMaster) =>({ - personID: x4.current_holder.id, - name: x4.current_holder.firstName, - avatar: x4.current_holder.avatar, - positionName: x4.current_holder.position, - positionNum: x4.orgChild4.orgChild4ShortName+x4.posMasterNo, - positionNumInt: x4.posMasterNo, - departmentName: x4.orgChild4.orgChild4Name, - organizationId: x4.orgChild4.id, - })) - })) - })) - })) - })); - + .filter((x: any) => x.current_holderId != null) + .map((x0: PosMaster) => ({ + personID: x0.current_holder.id, + name: x0.current_holder.firstName, + avatar: x0.current_holder.avatar, + positionName: x0.current_holder.position, + positionNum: x0.orgRoot.orgRootShortName + x0.posMasterNo, + positionNumInt: x0.posMasterNo, + departmentName: x0.orgRoot.orgRootName, + organizationId: x0.orgRoot.id, + children: posMasterChild1 + .filter((x: any) => x.current_holderId != null && x.orgRootId == x0.orgRootId) + .map((x1: PosMaster) => ({ + personID: x1.current_holder.id, + name: x1.current_holder.firstName, + avatar: x1.current_holder.avatar, + positionName: x1.current_holder.position, + positionNum: x1.orgChild1.orgChild1ShortName + x1.posMasterNo, + positionNumInt: x1.posMasterNo, + departmentName: x1.orgChild1.orgChild1Name, + organizationId: x1.orgChild1.id, + children: posMasterChild2 + .filter((x: any) => x.current_holderId != null && x.child1Id == x1.orgChild1Id) + .map((x2: PosMaster) => ({ + personID: x2.current_holder.id, + name: x2.current_holder.firstName, + avatar: x2.current_holder.avatar, + positionName: x2.current_holder.position, + positionNum: x2.orgChild2.orgChild2ShortName + x2.posMasterNo, + positionNumInt: x2.posMasterNo, + departmentName: x2.orgChild2.orgChild2Name, + organizationId: x2.orgChild2.id, + children: posMasterChild3 + .filter((x: any) => x.current_holderId != null && x.child2Id == x2.orgChild2Id) + .map((x3: PosMaster) => ({ + personID: x3.current_holder.id, + name: x3.current_holder.firstName, + avatar: x3.current_holder.avatar, + positionName: x3.current_holder.position, + positionNum: x3.orgChild3.orgChild3ShortName + x3.posMasterNo, + positionNumInt: x3.posMasterNo, + departmentName: x3.orgChild3.orgChild3Name, + organizationId: x3.orgChild3.id, + children: posMasterChild4 + .filter( + (x: any) => x.current_holderId != null && x.child3Id == x3.orgChild3Id, + ) + .map((x4: PosMaster) => ({ + personID: x4.current_holder.id, + name: x4.current_holder.firstName, + avatar: x4.current_holder.avatar, + positionName: x4.current_holder.position, + positionNum: x4.orgChild4.orgChild4ShortName + x4.posMasterNo, + positionNumInt: x4.posMasterNo, + departmentName: x4.orgChild4.orgChild4Name, + organizationId: x4.orgChild4.id, + })), + })), + })), + })), + })); + const formattedData_ = { personID: "", name: "", @@ -1886,117 +1887,115 @@ export class OrganizationController extends Controller { positionNumInt: null, departmentName: data.orgRevisionName, organizationId: data.id, - children: formattedData + children: formattedData, }; return new HttpSuccess([formattedData_]); - - } - else if(data.orgRevisionIsCurrent == false && data.orgRevisionIsDraft == true) { + } else if (data.orgRevisionIsCurrent == false && data.orgRevisionIsDraft == true) { posMasterRoot = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild1Id: IsNull(), - next_holderId: Not(IsNull()) + next_holderId: Not(IsNull()), }, - relations:["next_holder", "orgRoot"] + relations: ["next_holder", "orgRoot"], }); posMasterChild1 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild2Id: IsNull(), orgChild1Id: Not(IsNull()), - next_holderId: Not(IsNull()) + next_holderId: Not(IsNull()), }, - relations:["next_holder", "orgChild1"] + relations: ["next_holder", "orgChild1"], }); posMasterChild2 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild3Id: IsNull(), orgChild2Id: Not(IsNull()), - next_holderId: Not(IsNull()) + next_holderId: Not(IsNull()), }, - relations:["next_holder", "orgChild2"] + relations: ["next_holder", "orgChild2"], }); posMasterChild3 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild4Id: IsNull(), orgChild3Id: Not(IsNull()), - next_holderId: Not(IsNull()) + next_holderId: Not(IsNull()), }, - relations:["next_holder", "orgChild3"] + relations: ["next_holder", "orgChild3"], }); posMasterChild4 = await this.posMasterRepository.find({ where: { orgRevisionId: data.id, orgChild4Id: Not(IsNull()), - next_holderId: Not(IsNull()) + next_holderId: Not(IsNull()), }, - relations:["next_holder", "orgChild4"] + relations: ["next_holder", "orgChild4"], }); let formattedData = posMasterRoot - .filter((x:any) => x.next_holderId !=null) - .map((x0:PosMaster) => ({ - personID: x0.next_holder.id, - name: x0.next_holder.firstName, - avatar: x0.next_holder.avatar, - positionName: x0.next_holder.position, - positionNum: x0.orgRoot.orgRootShortName+x0.posMasterNo, - positionNumInt: x0.posMasterNo, - departmentName: x0.orgRoot.orgRootName, - organizationId: x0.orgRoot.id, - children: posMasterChild1 - .filter((x:any) => x.next_holderId !=null && x.orgRootId == x0.orgRootId) - .map((x1:PosMaster)=>({ - personID: x1.next_holder.id, - name: x1.next_holder.firstName, - avatar: x1.next_holder.avatar, - positionName: x1.next_holder.position, - positionNum: x1.orgChild1.orgChild1ShortName+x1.posMasterNo, - positionNumInt: x1.posMasterNo, - departmentName: x1.orgChild1.orgChild1Name, - organizationId: x1.orgChild1.id, - children: posMasterChild2 - .filter((x:any) => x.next_holderId !=null && x.child1Id == x1.orgChild1Id) - .map((x2:PosMaster) =>({ - personID: x2.next_holder.id, - name: x2.next_holder.firstName, - avatar: x2.next_holder.avatar, - positionName: x2.next_holder.position, - positionNum: x2.orgChild2.orgChild2ShortName+x2.posMasterNo, - positionNumInt: x2.posMasterNo, - departmentName: x2.orgChild2.orgChild2Name, - organizationId: x2.orgChild2.id, - children: posMasterChild3 - .filter((x:any) => x.next_holderId !=null && x.child2Id == x2.orgChild2Id) - .map((x3:PosMaster) =>({ - personID: x3.next_holder.id, - name: x3.next_holder.firstName, - avatar: x3.next_holder.avatar, - positionName: x3.next_holder.position, - positionNum: x3.orgChild3.orgChild3ShortName+x3.posMasterNo, - positionNumInt: x3.posMasterNo, - departmentName: x3.orgChild3.orgChild3Name, - organizationId: x3.orgChild3.id, - children: posMasterChild4 - .filter((x:any) => x.next_holderId !=null && x.child3Id == x3.orgChild3Id) - .map((x4:PosMaster) =>({ - personID: x4.next_holder.id, - name: x4.next_holder.firstName, - avatar: x4.next_holder.avatar, - positionName: x4.next_holder.position, - positionNum: x4.orgChild4.orgChild4ShortName+x4.posMasterNo, - positionNumInt: x4.posMasterNo, - departmentName: x4.orgChild4.orgChild4Name, - organizationId: x4.orgChild4.id, - })) - })) - })) - })) - })); - + .filter((x: any) => x.next_holderId != null) + .map((x0: PosMaster) => ({ + personID: x0.next_holder.id, + name: x0.next_holder.firstName, + avatar: x0.next_holder.avatar, + positionName: x0.next_holder.position, + positionNum: x0.orgRoot.orgRootShortName + x0.posMasterNo, + positionNumInt: x0.posMasterNo, + departmentName: x0.orgRoot.orgRootName, + organizationId: x0.orgRoot.id, + children: posMasterChild1 + .filter((x: any) => x.next_holderId != null && x.orgRootId == x0.orgRootId) + .map((x1: PosMaster) => ({ + personID: x1.next_holder.id, + name: x1.next_holder.firstName, + avatar: x1.next_holder.avatar, + positionName: x1.next_holder.position, + positionNum: x1.orgChild1.orgChild1ShortName + x1.posMasterNo, + positionNumInt: x1.posMasterNo, + departmentName: x1.orgChild1.orgChild1Name, + organizationId: x1.orgChild1.id, + children: posMasterChild2 + .filter((x: any) => x.next_holderId != null && x.child1Id == x1.orgChild1Id) + .map((x2: PosMaster) => ({ + personID: x2.next_holder.id, + name: x2.next_holder.firstName, + avatar: x2.next_holder.avatar, + positionName: x2.next_holder.position, + positionNum: x2.orgChild2.orgChild2ShortName + x2.posMasterNo, + positionNumInt: x2.posMasterNo, + departmentName: x2.orgChild2.orgChild2Name, + organizationId: x2.orgChild2.id, + children: posMasterChild3 + .filter((x: any) => x.next_holderId != null && x.child2Id == x2.orgChild2Id) + .map((x3: PosMaster) => ({ + personID: x3.next_holder.id, + name: x3.next_holder.firstName, + avatar: x3.next_holder.avatar, + positionName: x3.next_holder.position, + positionNum: x3.orgChild3.orgChild3ShortName + x3.posMasterNo, + positionNumInt: x3.posMasterNo, + departmentName: x3.orgChild3.orgChild3Name, + organizationId: x3.orgChild3.id, + children: posMasterChild4 + .filter((x: any) => x.next_holderId != null && x.child3Id == x3.orgChild3Id) + .map((x4: PosMaster) => ({ + personID: x4.next_holder.id, + name: x4.next_holder.firstName, + avatar: x4.next_holder.avatar, + positionName: x4.next_holder.position, + positionNum: x4.orgChild4.orgChild4ShortName + x4.posMasterNo, + positionNumInt: x4.posMasterNo, + departmentName: x4.orgChild4.orgChild4Name, + organizationId: x4.orgChild4.id, + })), + })), + })), + })), + })); + const formattedData_ = { personID: "", name: "", @@ -2006,11 +2005,10 @@ export class OrganizationController extends Controller { positionNumInt: null, departmentName: data.orgRevisionName, organizationId: data.id, - children: formattedData + children: formattedData, }; return new HttpSuccess([formattedData_]); - } - else { + } else { return new HttpSuccess([ { personID: "", @@ -2021,8 +2019,8 @@ export class OrganizationController extends Controller { positionNumInt: null, departmentName: data.orgRevisionName, organizationId: data.id, - children: [] - } + children: [], + }, ]); } } @@ -3718,15 +3716,15 @@ export class OrganizationController extends Controller { }); if (!root) throw new HttpError(HttpStatusCode.NOT_FOUND, "not found. Root"); const posMaster = await this.posMasterRepository.find({ - where: { orgRootId: root.id, orgChild1Id: IsNull() }, + where: { orgRootId: root.id, orgChild1Id: IsNull(), current_holder: Not(IsNull()) }, relations: ["current_holder"], }); if (!posMaster) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่ง"); const maps = posMaster.map((posMaster) => ({ - id: posMaster.current_holder.id, - name: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`, - positionName: posMaster.current_holder.position, + id: posMaster?.current_holder?.id, + name: `${posMaster?.current_holder?.prefix}${posMaster?.current_holder?.firstName} ${posMaster?.current_holder?.lastName}`, + positionName: posMaster?.current_holder?.position, })); return new HttpSuccess(maps); diff --git a/src/interfaces/permission.ts b/src/interfaces/permission.ts new file mode 100644 index 00000000..74bb1de4 --- /dev/null +++ b/src/interfaces/permission.ts @@ -0,0 +1,58 @@ +import { + Controller, + Request, + Get, + Post, + Put, + Delete, + Patch, + Route, + Security, + Tags, + Path, +} from "tsoa"; +import axios from "axios"; +import { RequestWithUser } from "../middlewares/user"; +import CallAPI from "./call-api"; +import HttpError from "./http-error"; +import HttpStatus from "./http-status"; + +class CheckAuth { + public async Permission(req: RequestWithUser, system: string, action: string) { + await new CallAPI() + .GetData(req, "/org/permission") + .then((x) => { + let permission = false; + let role = x.roles.find((x: any) => x.authSysId == system); + if (!role) throw "ไม่มีสิทธิ์เข้าระบบ"; + 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 (role.attrOwnership == "OWNER") permission = true; + if (permission == false) throw "ไม่มีสิทธิ์ใช้งานระบบนี้"; + return role.attrPrivilege; + }) + .catch((x) => { + throw new HttpError(HttpStatus.FORBIDDEN, x); + }); + } + public async PermissionCreate(req: RequestWithUser, system: string) { + this.Permission(req, system, "CREATE"); + } + public async PermissionDelete(req: RequestWithUser, system: string) { + this.Permission(req, system, "DELETE"); + } + public async PermissionGet(req: RequestWithUser, system: string) { + this.Permission(req, system, "GET"); + } + public async PermissionList(req: RequestWithUser, system: string) { + this.Permission(req, system, "LIST"); + } + public async PermissionUpdate(req: RequestWithUser, system: string) { + this.Permission(req, system, "UPDATE"); + } +} + +export default CheckAuth;