up permisssions
This commit is contained in:
@@ -10,7 +10,7 @@ export enum PermissionEnum {
|
|||||||
|
|
||||||
// invoice
|
// invoice
|
||||||
VIEW_INVOICES = 'view_invoices',
|
VIEW_INVOICES = 'view_invoices',
|
||||||
CREATE_INVOICE = 'create_invoice',
|
CREATE_INVOICE = 'create_invoice',
|
||||||
UPDATE_INVOICE = 'update_invoice',
|
UPDATE_INVOICE = 'update_invoice',
|
||||||
DELETE_INVOICE = 'delete_invoice',
|
DELETE_INVOICE = 'delete_invoice',
|
||||||
|
|
||||||
@@ -39,8 +39,8 @@ export enum PermissionEnum {
|
|||||||
MANAGE_SETTINGS = 'manage_settings',
|
MANAGE_SETTINGS = 'manage_settings',
|
||||||
|
|
||||||
|
|
||||||
CREATE_PRINT = 'create_print',
|
CREATE_PRINT_FORM = 'create_print_form',
|
||||||
VIEW_PRINT = 'view_print',
|
VIEW_PRINT_FORM = 'view_print_form',
|
||||||
|
|
||||||
MANAGE_LEARNINGS = 'manage_learnings',
|
MANAGE_LEARNINGS = 'manage_learnings',
|
||||||
MANAGE_CRITICISMS = 'manage_criticisms',
|
MANAGE_CRITICISMS = 'manage_criticisms',
|
||||||
@@ -69,24 +69,24 @@ export const PermissionTitles: Record<PermissionEnum, string> = {
|
|||||||
[PermissionEnum.MANAGE_PAYMENTS]: 'مدیریت پرداختها',
|
[PermissionEnum.MANAGE_PAYMENTS]: 'مدیریت پرداختها',
|
||||||
[PermissionEnum.MANAGE_SETTINGS]: 'مدیریت تنظیمات',
|
[PermissionEnum.MANAGE_SETTINGS]: 'مدیریت تنظیمات',
|
||||||
[PermissionEnum.VIEW_REQUESTS]: "مشاهده همه درخواست سفارش ها",
|
[PermissionEnum.VIEW_REQUESTS]: "مشاهده همه درخواست سفارش ها",
|
||||||
[PermissionEnum.DELETE_REQUEST]: "",
|
[PermissionEnum.DELETE_REQUEST]: "حدف درخواست سفارش",
|
||||||
[PermissionEnum.UPDATE_REQUEST]: "",
|
[PermissionEnum.UPDATE_REQUEST]: "ویرایش درخواست سفارش",
|
||||||
[PermissionEnum.VIEW_INVOICES]: "",
|
[PermissionEnum.VIEW_INVOICES]: "مشاهده همه فاکتورها",
|
||||||
[PermissionEnum.CREATE_INVOICE]: "",
|
[PermissionEnum.CREATE_INVOICE]: "ایجاد فاکتور جدید",
|
||||||
[PermissionEnum.UPDATE_INVOICE]: "",
|
[PermissionEnum.UPDATE_INVOICE]: "ویرایش فاکتور",
|
||||||
[PermissionEnum.DELETE_INVOICE]: "",
|
[PermissionEnum.DELETE_INVOICE]: "حدف فاکتور",
|
||||||
[PermissionEnum.DELETE_ORDER]: "",
|
[PermissionEnum.DELETE_ORDER]: "حدف سفارش",
|
||||||
[PermissionEnum.CREATE_PRINT]: "ایجاد فرم چاپ برای سفارش",
|
[PermissionEnum.CREATE_PRINT_FORM]: "ایجاد فرم چاپ جدید برای سفارش",
|
||||||
[PermissionEnum.VIEW_PRINT]: "مدیریت فرم چاپ",
|
[PermissionEnum.VIEW_PRINT_FORM]: "مشاهده همه فرم های چاپ",
|
||||||
[PermissionEnum.MANAGE_LEARNINGS]: "مدیریت آموزشها",
|
[PermissionEnum.MANAGE_LEARNINGS]: "مدیریت آموزشها",
|
||||||
[PermissionEnum.MANAGE_CRITICISMS]: "مدیریت انتقادها و پیشنهادها",
|
[PermissionEnum.MANAGE_CRITICISMS]: "مدیریت انتقادها و پیشنهادها",
|
||||||
[PermissionEnum.MANAGE_ANNOUNCEMENTS]: "مدیریت اطلاعیهها",
|
[PermissionEnum.MANAGE_ANNOUNCEMENTS]: "مدیریت اعلانها",
|
||||||
[PermissionEnum.MANAGE_TICKETS]: "مدیریت تیکتها",
|
[PermissionEnum.MANAGE_TICKETS]: "مدیریت تیکت ها",
|
||||||
[PermissionEnum.NEW_REQUEST_NOTIFICATION]: "",
|
[PermissionEnum.CREATE_USER]: "ایجاد کاربر جدید",
|
||||||
[PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "",
|
[PermissionEnum.UPDATE_USER]: "ویرایش کاربر",
|
||||||
[PermissionEnum.CREATE_USER]: "",
|
[PermissionEnum.DELETE_USER]: "حدف کاربر",
|
||||||
[PermissionEnum.UPDATE_USER]: "",
|
[PermissionEnum.VIEW_USERS]: "مشاهده همه کاربران",
|
||||||
[PermissionEnum.DELETE_USER]: "",
|
[PermissionEnum.NEW_REQUEST_NOTIFICATION]: "اعلان جدید برای درخواست سفارش",
|
||||||
[PermissionEnum.VIEW_USERS]: "",
|
[PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "اعلان جدید برای پرداخت",
|
||||||
[PermissionEnum.NEW_TICKET_NOTIFICATION]: ""
|
[PermissionEnum.NEW_TICKET_NOTIFICATION]: "اعلان جدید برای تیکت",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ export class AdminService {
|
|||||||
return admins
|
return admins
|
||||||
}
|
}
|
||||||
|
|
||||||
async hasPermissions(adminId: string, permissionNames: PermissionEnum[]): Promise<PermissionEnum[]> {
|
async ownedPermissions(adminId: string, permissionNames: PermissionEnum[]): Promise<PermissionEnum[]> {
|
||||||
if (permissionNames.length === 0) return []
|
if (permissionNames.length === 0) return []
|
||||||
|
|
||||||
const admin = await this.adminRepository.findOne(
|
const admin = await this.adminRepository.findOne(
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export class OrderController {
|
|||||||
// Permission handled inside service
|
// Permission handled inside service
|
||||||
@Get('admin/orders')
|
@Get('admin/orders')
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@Permissions(PermissionEnum.VIEW_ORDERS)
|
// @Permissions(PermissionEnum.VIEW_ORDERS)
|
||||||
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
|
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
|
||||||
findAllAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
|
findAllAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
|
||||||
return this.orderService.findOrdersAsAdmin(adminId, dto);
|
return this.orderService.findOrdersAsAdmin(adminId, dto);
|
||||||
@@ -106,7 +106,7 @@ export class OrderController {
|
|||||||
|
|
||||||
@Post('admin/orders/:orderId/print')
|
@Post('admin/orders/:orderId/print')
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@Permissions(PermissionEnum.CREATE_PRINT)
|
@Permissions(PermissionEnum.CREATE_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Create order print' })
|
@ApiOperation({ summary: 'Create order print' })
|
||||||
@ApiOkResponse({ description: 'Order print created or updated' })
|
@ApiOkResponse({ description: 'Order print created or updated' })
|
||||||
createPrint(@Param('orderId') orderId: string, @Body() body: CreateOrderPrintDto) {
|
createPrint(@Param('orderId') orderId: string, @Body() body: CreateOrderPrintDto) {
|
||||||
@@ -115,7 +115,7 @@ export class OrderController {
|
|||||||
|
|
||||||
@Get('admin/orders/:orderId/print')
|
@Get('admin/orders/:orderId/print')
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Get order print' })
|
@ApiOperation({ summary: 'Get order print' })
|
||||||
@ApiOkResponse({ description: 'Order print details' })
|
@ApiOkResponse({ description: 'Order print details' })
|
||||||
getPrint(@Param('orderId') orderId: string) {
|
getPrint(@Param('orderId') orderId: string) {
|
||||||
|
|||||||
@@ -130,18 +130,17 @@ export class OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findOrdersAsAdmin(adminId: string, dto: FindOrdersDto): Promise<PaginatedResult<Order>> {
|
async findOrdersAsAdmin(adminId: string, dto: FindOrdersDto): Promise<PaginatedResult<Order>> {
|
||||||
const permissions = await this.adminService.hasPermissions(adminId,
|
const permissions = await this.adminService.ownedPermissions(adminId,
|
||||||
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS])
|
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS])
|
||||||
|
|
||||||
if (permissions.includes(PermissionEnum.VIEW_ORDERS)) {
|
if (permissions.includes(PermissionEnum.VIEW_ORDERS)) {
|
||||||
|
|
||||||
return this.orderRepository.findAllPaginated(dto)
|
return this.orderRepository.findAllPaginated(dto)
|
||||||
|
|
||||||
} else if (permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS)) {
|
} else if (permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS)) {
|
||||||
|
return this.orderRepository.findAllPaginated({
|
||||||
return this.orderRepository.findAllPaginated({
|
...dto,
|
||||||
designerId: adminId,
|
designerId: adminId,
|
||||||
...dto
|
|
||||||
})
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -208,7 +207,7 @@ export class OrderService {
|
|||||||
|
|
||||||
|
|
||||||
async updateStatus(orderId: string, adminId: string, dto: UpdateStatusDto): Promise<Order> {
|
async updateStatus(orderId: string, adminId: string, dto: UpdateStatusDto): Promise<Order> {
|
||||||
const permissions = await this.adminService.hasPermissions(adminId,
|
const permissions = await this.adminService.ownedPermissions(adminId,
|
||||||
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS])
|
[PermissionEnum.VIEW_ORDERS, PermissionEnum.VIEW_ASSIGNED_ORDERS])
|
||||||
|
|
||||||
if (permissions.includes(PermissionEnum.VIEW_ORDERS)) {
|
if (permissions.includes(PermissionEnum.VIEW_ORDERS)) {
|
||||||
|
|||||||
@@ -6,11 +6,6 @@ import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
|
|||||||
import { OrderStatusEnum } from '../interface/order.interface';
|
import { OrderStatusEnum } from '../interface/order.interface';
|
||||||
import { FindOrdersDto } from '../dto/find-orders.dto';
|
import { FindOrdersDto } from '../dto/find-orders.dto';
|
||||||
|
|
||||||
|
|
||||||
// class FindOrdersOpts extends FindOrdersDto {
|
|
||||||
// adminId?: string;
|
|
||||||
// };
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class OrderRepository extends EntityRepository<Order> {
|
export class OrderRepository extends EntityRepository<Order> {
|
||||||
constructor(readonly em: EntityManager) {
|
constructor(readonly em: EntityManager) {
|
||||||
@@ -76,7 +71,6 @@ export class OrderRepository extends EntityRepository<Order> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Search by order number or user information
|
// Search by order number or user information
|
||||||
if (search) {
|
if (search) {
|
||||||
const searchPattern = `%${search}%`;
|
const searchPattern = `%${search}%`;
|
||||||
@@ -103,31 +97,7 @@ export class OrderRepository extends EntityRepository<Order> {
|
|||||||
populate: ['user', 'product', 'designer'],
|
populate: ['user', 'product', 'designer'],
|
||||||
});
|
});
|
||||||
|
|
||||||
// Collect all (orderId, productId) pairs for efficient review lookup
|
|
||||||
// const orderproductPairs: Array<{ orderId: string; productId: bigint }> = [];
|
|
||||||
// for (const order of data) {
|
|
||||||
// for (const item of order.items.getItems()) {
|
|
||||||
// if (item.product?.id) {
|
|
||||||
// orderproductPairs.push({ orderId: order.id, productId: item.product.id });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Map reviewIds to products
|
|
||||||
// for (const order of data) {
|
|
||||||
// for (const item of order.items.getItems()) {
|
|
||||||
// if (item.product) {
|
|
||||||
// const key = `${order.id}-${item.product.id}`;
|
|
||||||
// // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
||||||
// const product = item.product as any;
|
|
||||||
// // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
const totalPages = Math.ceil(total / limit);
|
const totalPages = Math.ceil(total / limit);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export class PrintFormController {
|
|||||||
/*================================ Section ========================== */
|
/*================================ Section ========================== */
|
||||||
|
|
||||||
@Post('section')
|
@Post('section')
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Create section' })
|
@ApiOperation({ summary: 'Create section' })
|
||||||
create(@Body() dto: CreateSectionDto) {
|
create(@Body() dto: CreateSectionDto) {
|
||||||
return this.printFormService.create(dto);
|
return this.printFormService.create(dto);
|
||||||
@@ -28,27 +28,27 @@ export class PrintFormController {
|
|||||||
|
|
||||||
@Get('section')
|
@Get('section')
|
||||||
@ApiOperation({ summary: 'find all section' })
|
@ApiOperation({ summary: 'find all section' })
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
findAll() {
|
findAll() {
|
||||||
return this.printFormService.findAll();
|
return this.printFormService.findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('section/:id')
|
@Get('section/:id')
|
||||||
@ApiOperation({ summary: 'Find one section' })
|
@ApiOperation({ summary: 'Find one section' })
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
findOne(@Param('id') id: string) {
|
findOne(@Param('id') id: string) {
|
||||||
return this.printFormService.finOrFail(id);
|
return this.printFormService.finOrFail(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Patch('section/:id')
|
@Patch('section/:id')
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Update section' })
|
@ApiOperation({ summary: 'Update section' })
|
||||||
update(@Param('id') id: string, @Body() dto: UpdateSectionDto) {
|
update(@Param('id') id: string, @Body() dto: UpdateSectionDto) {
|
||||||
return this.printFormService.update(id, dto);
|
return this.printFormService.update(id, dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Delete('section/:id')
|
@Delete('section/:id')
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Remove section' })
|
@ApiOperation({ summary: 'Remove section' })
|
||||||
remove(@Param('id') id: string) {
|
remove(@Param('id') id: string) {
|
||||||
return this.printFormService.remove(id);
|
return this.printFormService.remove(id);
|
||||||
@@ -56,7 +56,7 @@ export class PrintFormController {
|
|||||||
|
|
||||||
/// front end must send form with its selected fields
|
/// front end must send form with its selected fields
|
||||||
@Post('pdf')
|
@Post('pdf')
|
||||||
@Permissions(PermissionEnum.VIEW_PRINT)
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
||||||
@ApiOperation({ summary: 'Create Pdf' })
|
@ApiOperation({ summary: 'Create Pdf' })
|
||||||
async createPDf(@Body() dto: CreateSectionDto, @Res() res: FastifyReply) {
|
async createPDf(@Body() dto: CreateSectionDto, @Res() res: FastifyReply) {
|
||||||
const html = `
|
const html = `
|
||||||
|
|||||||
Reference in New Issue
Block a user