admin permission
This commit is contained in:
@@ -1,7 +1,3 @@
|
|||||||
/**
|
|
||||||
* Permission names enum
|
|
||||||
* All permission names used in the system should be defined here
|
|
||||||
*/
|
|
||||||
export enum Permission {
|
export enum Permission {
|
||||||
|
|
||||||
MANAGE_PRODUCTS = 'manage_products',
|
MANAGE_PRODUCTS = 'manage_products',
|
||||||
@@ -9,28 +5,23 @@ export enum Permission {
|
|||||||
|
|
||||||
// Order Management
|
// Order Management
|
||||||
VIEW_ORDERS = 'view_orders',
|
VIEW_ORDERS = 'view_orders',
|
||||||
|
CREATE_ORDER = 'create_order',
|
||||||
|
UPDATE_ORDER = 'update_order',
|
||||||
ASSIGN_DESIGNER = 'assign_designer',
|
ASSIGN_DESIGNER = 'assign_designer',
|
||||||
MANAGE_ORDERS = 'manage_orders',
|
CHANGE_ORDER_STATUS = 'change_order_status',
|
||||||
|
REMOVE_ORDER = 'remove_order',
|
||||||
|
|
||||||
// User & Admin Management
|
// User & Admin Management
|
||||||
MANAGE_ADMINS = 'manage_admins',
|
MANAGE_ADMINS = 'manage_admins',
|
||||||
MANAGE_USERS = 'manage_users',
|
|
||||||
|
|
||||||
// Reports & Finances
|
|
||||||
VIEW_REPORTS = 'view_reports',
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Role Management
|
// Role Management
|
||||||
MANAGE_ROLES = 'manage_roles',
|
MANAGE_ROLES = 'manage_roles',
|
||||||
|
|
||||||
|
MANAGE_USERS = 'manage_users',
|
||||||
|
|
||||||
MANAGE_PAYMENTS = 'manage_payments',
|
MANAGE_PAYMENTS = 'manage_payments',
|
||||||
|
|
||||||
MANAGE_SETTINGS = 'manage_settings',
|
MANAGE_SETTINGS = 'manage_settings',
|
||||||
|
|
||||||
MANAGE_REPORTS = 'manage_reports',
|
|
||||||
MANAGE_CONTACTS = 'manage_contacts',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,17 +29,20 @@ export enum Permission {
|
|||||||
* Maps permission names to their Farsi titles
|
* Maps permission names to their Farsi titles
|
||||||
*/
|
*/
|
||||||
export const PermissionTitles: Record<Permission, string> = {
|
export const PermissionTitles: Record<Permission, string> = {
|
||||||
[Permission.MANAGE_PRODUCTS]: 'مدیریت غذاها',
|
[Permission.MANAGE_PRODUCTS]: 'مدیریت محصولات',
|
||||||
[Permission.MANAGE_CATEGORIES]: 'مدیریت دستهبندیها',
|
[Permission.MANAGE_CATEGORIES]: 'مدیریت دستهبندیها',
|
||||||
[Permission.MANAGE_ORDERS]: 'مدیریت سفارشات',
|
|
||||||
|
[Permission.CREATE_ORDER]: 'ایجاد سفارش جدید',
|
||||||
|
[Permission.UPDATE_ORDER]: 'ویرایش سفارش ',
|
||||||
|
[Permission.VIEW_ORDERS]: "مشاهده سفارش ها",
|
||||||
|
[Permission.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش",
|
||||||
|
[Permission.CHANGE_ORDER_STATUS]: "تغییر وضعیت سفارش",
|
||||||
|
[Permission.REMOVE_ORDER]: "حذف سفارش",
|
||||||
|
|
||||||
[Permission.MANAGE_ADMINS]: 'مدیریت مدیران',
|
[Permission.MANAGE_ADMINS]: 'مدیریت مدیران',
|
||||||
[Permission.MANAGE_USERS]: 'مدیریت کاربران',
|
[Permission.MANAGE_USERS]: 'مدیریت کاربران',
|
||||||
[Permission.VIEW_REPORTS]: 'مشاهده گزارشات',
|
|
||||||
[Permission.MANAGE_ROLES]: 'مدیریت نقشها',
|
[Permission.MANAGE_ROLES]: 'مدیریت نقشها',
|
||||||
[Permission.MANAGE_PAYMENTS]: 'مدیریت پرداختها',
|
[Permission.MANAGE_PAYMENTS]: 'مدیریت پرداختها',
|
||||||
[Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات',
|
[Permission.MANAGE_SETTINGS]: 'مدیریت تنظیمات',
|
||||||
[Permission.MANAGE_REPORTS]: 'مدیریت گزارشات',
|
|
||||||
[Permission.MANAGE_CONTACTS]: 'مدیریت تماسهای کاربران',
|
|
||||||
[Permission.VIEW_ORDERS]: "",
|
|
||||||
[Permission.ASSIGN_DESIGNER]: ""
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Controller, Post, Body, HttpCode, HttpStatus, Get, UseGuards, Patch, Param, Delete } from '@nestjs/common';
|
import { Controller, Post, Body, Get, UseGuards, Patch, Param, Delete } from '@nestjs/common';
|
||||||
import { AdminService } from '../providers/admin.service';
|
import { AdminService } from '../providers/admin.service';
|
||||||
import { CreateAdminDto } from '../dto/create-admin.dto';
|
import { CreateAdminDto } from '../dto/create-admin.dto';
|
||||||
import { UpdateAdminDto } from '../dto/update-admin.dto';
|
import { UpdateAdminDto } from '../dto/update-admin.dto';
|
||||||
@@ -10,26 +10,22 @@ import { Permission } from 'src/common/enums/permission.enum';
|
|||||||
import { Permissions } from 'src/common/decorators/permissions.decorator';
|
import { Permissions } from 'src/common/decorators/permissions.decorator';
|
||||||
|
|
||||||
// TODO : if admin deleted then recreated it must be doable
|
// TODO : if admin deleted then recreated it must be doable
|
||||||
@ApiBearerAuth()
|
|
||||||
@ApiTags('admin')
|
|
||||||
@Controller()
|
@Controller()
|
||||||
|
@ApiTags('admin')
|
||||||
|
@UseGuards(AdminAuthGuard)
|
||||||
|
@ApiBearerAuth()
|
||||||
|
@Permissions(Permission.MANAGE_ADMINS)
|
||||||
export class AdminController {
|
export class AdminController {
|
||||||
constructor(private readonly adminService: AdminService) { }
|
constructor(private readonly adminService: AdminService) { }
|
||||||
|
|
||||||
@Post('admin/admin')
|
@Post('admin/admin')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@HttpCode(HttpStatus.CREATED)
|
|
||||||
@ApiOperation({ summary: 'Create a new admin' })
|
@ApiOperation({ summary: 'Create a new admin' })
|
||||||
@ApiBody({ type: CreateAdminDto })
|
|
||||||
async create(@Body() dto: CreateAdminDto,) {
|
async create(@Body() dto: CreateAdminDto,) {
|
||||||
const admin = await this.adminService.create(dto);
|
const admin = await this.adminService.create(dto);
|
||||||
return admin;
|
return admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('admin/admins')
|
@Get('admin/admins')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@ApiOperation({ summary: 'admin' })
|
@ApiOperation({ summary: 'admin' })
|
||||||
async getAll() {
|
async getAll() {
|
||||||
const admin = await this.adminService.findAll();
|
const admin = await this.adminService.findAll();
|
||||||
@@ -37,8 +33,6 @@ export class AdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Get('admin/admins/me')
|
@Get('admin/admins/me')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@ApiOperation({ summary: 'admin' })
|
@ApiOperation({ summary: 'admin' })
|
||||||
async getMe(@AdminId() adminId: string,) {
|
async getMe(@AdminId() adminId: string,) {
|
||||||
const admin = await this.adminService.findById(adminId,);
|
const admin = await this.adminService.findById(adminId,);
|
||||||
@@ -47,8 +41,6 @@ export class AdminController {
|
|||||||
|
|
||||||
|
|
||||||
@Patch('admin/admins/:adminId')
|
@Patch('admin/admins/:adminId')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@ApiOperation({ summary: 'Update an admin' })
|
@ApiOperation({ summary: 'Update an admin' })
|
||||||
@ApiParam({ name: 'adminId', description: 'Admin ID' })
|
@ApiParam({ name: 'adminId', description: 'Admin ID' })
|
||||||
@ApiBody({ type: UpdateAdminDto })
|
@ApiBody({ type: UpdateAdminDto })
|
||||||
@@ -57,8 +49,6 @@ export class AdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Get('admin/admins/:adminId')
|
@Get('admin/admins/:adminId')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@ApiOperation({ summary: 'Get an admin by ID' })
|
@ApiOperation({ summary: 'Get an admin by ID' })
|
||||||
@ApiParam({ name: 'id', description: 'Admin ID' })
|
@ApiParam({ name: 'id', description: 'Admin ID' })
|
||||||
getById(@Param('adminId') adminId: string,): Promise<Admin | null> {
|
getById(@Param('adminId') adminId: string,): Promise<Admin | null> {
|
||||||
@@ -66,8 +56,6 @@ export class AdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Delete('admin/admins/:adminId')
|
@Delete('admin/admins/:adminId')
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@Permissions(Permission.MANAGE_ADMINS)
|
|
||||||
@ApiOperation({ summary: 'Delete an admin by ID' })
|
@ApiOperation({ summary: 'Delete an admin by ID' })
|
||||||
@ApiParam({ name: 'id', description: 'Admin ID' })
|
@ApiParam({ name: 'id', description: 'Admin ID' })
|
||||||
deleteById(@Param('adminId') adminId: string,): Promise<void> {
|
deleteById(@Param('adminId') adminId: string,): Promise<void> {
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ export class OrderController {
|
|||||||
@Post('admin/orders/:orderId/invoice')
|
@Post('admin/orders/:orderId/invoice')
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@ApiOperation({ summary: 'Create Order invoice ' })
|
@ApiOperation({ summary: 'Create Order invoice ' })
|
||||||
createInvoice(@Param('orderId') orderId: string, @Body() dto: UpdateOrderAsAdminDto) {
|
createInvoice(@Param('orderId') orderId: string) {
|
||||||
return this.orderService.createInvoice(orderId);
|
return this.orderService.createInvoice(orderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +166,7 @@ export class OrderController {
|
|||||||
return this.orderService.addOrderItemAsAdmin(orderId, body);
|
return this.orderService.addOrderItemAsAdmin(orderId, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Patch('admin/orders/:id/item/:itemId')
|
@Patch('admin/orders/:id/item/:itemId')
|
||||||
@UseGuards(AdminAuthGuard)
|
@UseGuards(AdminAuthGuard)
|
||||||
@ApiOperation({ summary: 'Update order item' })
|
@ApiOperation({ summary: 'Update order item' })
|
||||||
|
|||||||
@@ -10,9 +10,7 @@ import {
|
|||||||
} from '../dto/create-order.dto';
|
} from '../dto/create-order.dto';
|
||||||
import { UserService } from 'src/modules/user/providers/user.service';
|
import { UserService } from 'src/modules/user/providers/user.service';
|
||||||
import {
|
import {
|
||||||
CreateOrderItem,
|
OrderStatusEnum,
|
||||||
CreateOrder, OrderStatusEnum,
|
|
||||||
// UpdateOrderItem,
|
|
||||||
CreateOrderWithItems,
|
CreateOrderWithItems,
|
||||||
CreateOrderItemPopulated,
|
CreateOrderItemPopulated,
|
||||||
UpdateOrder,
|
UpdateOrder,
|
||||||
@@ -28,7 +26,6 @@ import { Order } from '../entities/order.entity';
|
|||||||
import { PaymentRepository } from 'src/modules/payment/repositories/payment.repository';
|
import { PaymentRepository } from 'src/modules/payment/repositories/payment.repository';
|
||||||
import { UpdateOrderItemDtoAsAdmin, UpdateOrderItemDtoAsUser } from '../dto/update-order-item.dto';
|
import { UpdateOrderItemDtoAsAdmin, UpdateOrderItemDtoAsUser } from '../dto/update-order-item.dto';
|
||||||
import { Admin } from 'src/modules/admin/entities/admin.entity';
|
import { Admin } from 'src/modules/admin/entities/admin.entity';
|
||||||
import { Product } from 'src/modules/product/entities/product.entity';
|
|
||||||
import { AdminService } from 'src/modules/admin/providers/admin.service';
|
import { AdminService } from 'src/modules/admin/providers/admin.service';
|
||||||
import { OrderItem } from '../entities/order-item.entity';
|
import { OrderItem } from '../entities/order-item.entity';
|
||||||
import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
|
import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
|
||||||
@@ -65,7 +62,7 @@ export class OrderService {
|
|||||||
|
|
||||||
async createOrderAsUser(userId: string, dto: CreateOrderAsUSerDto) {
|
async createOrderAsUser(userId: string, dto: CreateOrderAsUSerDto) {
|
||||||
const order = await this.createOrder({ ...dto, userId, status: OrderStatusEnum.CREATED })
|
const order = await this.createOrder({ ...dto, userId, status: OrderStatusEnum.CREATED })
|
||||||
this.logger.log("Order created as admin")
|
this.logger.log("Order created as user")
|
||||||
return order
|
return order
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user