feat(perm): update api product/service permission

This commit is contained in:
Methapon2001 2025-07-02 13:21:10 +07:00
parent b0e941085e
commit afb725fceb
3 changed files with 37 additions and 14 deletions

View file

@ -35,14 +35,16 @@ const MANAGE_ROLES = [
"system", "system",
"head_of_admin", "head_of_admin",
"admin", "admin",
"head_of_accountant", "executive",
"accountant", "accountant",
"head_of_sale", "branch_admin",
"branch_manager",
"branch_accountant",
]; ];
function globalAllow(user: RequestWithUser["user"]) { function globalAllow(user: RequestWithUser["user"]) {
const allowList = ["system", "head_of_admin", "head_of_accountant", "head_of_sale"]; const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"];
return allowList.some((v) => user.roles?.includes(v)); return user.roles?.some((v) => listAllowed.includes(v)) || false;
} }
const permissionCondCompany = createPermCondition((_) => true); const permissionCondCompany = createPermCondition((_) => true);

View file

@ -35,7 +35,7 @@ type ProductGroupCreate = {
remark: string; remark: string;
status?: Status; status?: Status;
shared?: boolean; shared?: boolean;
registeredBranchId: string; registeredBranchId?: string;
}; };
type ProductGroupUpdate = { type ProductGroupUpdate = {
@ -51,14 +51,16 @@ const MANAGE_ROLES = [
"system", "system",
"head_of_admin", "head_of_admin",
"admin", "admin",
"head_of_accountant", "executive",
"accountant", "accountant",
"head_of_sale", "branch_admin",
"branch_manager",
"branch_accountant",
]; ];
function globalAllow(user: RequestWithUser["user"]) { function globalAllow(user: RequestWithUser["user"]) {
const allowList = ["system", "head_of_admin", "head_of_accountant", "head_of_sale"]; const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"];
return allowList.some((v) => user.roles?.includes(v)); return user.roles?.some((v) => listAllowed.includes(v)) || false;
} }
const permissionCond = createPermCondition((_) => true); const permissionCond = createPermCondition((_) => true);
@ -157,7 +159,23 @@ export class ProductGroup extends Controller {
@Post() @Post()
@Security("keycloak", MANAGE_ROLES) @Security("keycloak", MANAGE_ROLES)
async createProductGroup(@Request() req: RequestWithUser, @Body() body: ProductGroupCreate) { async createProductGroup(@Request() req: RequestWithUser, @Body() body: ProductGroupCreate) {
let company = await permissionCheck(req.user, body.registeredBranchId).then( const userAffiliatedBranch = await prisma.branch.findFirst({
include: branchRelationPermInclude(req.user),
where: body.registeredBranchId
? { id: body.registeredBranchId }
: {
user: { some: { userId: req.user.sub } },
},
});
if (!userAffiliatedBranch) {
throw new HttpError(
HttpStatus.BAD_REQUEST,
"You must be affilated with at least one branch or specify branch to be registered (System permission required).",
"reqMinAffilatedBranch",
);
}
let company = await permissionCheck(req.user, userAffiliatedBranch).then(
(v) => (v.headOffice || v).code, (v) => (v.headOffice || v).code,
); );
@ -181,6 +199,7 @@ export class ProductGroup extends Controller {
}, },
data: { data: {
...body, ...body,
registeredBranchId: userAffiliatedBranch.id,
statusOrder: +(body.status === "INACTIVE"), statusOrder: +(body.status === "INACTIVE"),
code: `G${last.value.toString().padStart(2, "0")}`, code: `G${last.value.toString().padStart(2, "0")}`,
createdByUserId: req.user.sub, createdByUserId: req.user.sub,

View file

@ -42,14 +42,16 @@ const MANAGE_ROLES = [
"system", "system",
"head_of_admin", "head_of_admin",
"admin", "admin",
"head_of_accountant", "executive",
"accountant", "accountant",
"head_of_sale", "branch_admin",
"branch_manager",
"branch_accountant",
]; ];
function globalAllow(user: RequestWithUser["user"]) { function globalAllow(user: RequestWithUser["user"]) {
const allowList = ["system", "head_of_admin", "head_of_accountant", "head_of_sale"]; const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"];
return allowList.some((v) => user.roles?.includes(v)); return user.roles?.some((v) => listAllowed.includes(v)) || false;
} }
const permissionCondCompany = createPermCondition((_) => true); const permissionCondCompany = createPermCondition((_) => true);