admin permission

This commit is contained in:
2026-02-01 12:11:09 +03:30
parent 0f4ef03f1d
commit 8fa88ce6c2
4 changed files with 24 additions and 44 deletions
+15 -21
View File
@@ -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' })
+2 -5
View File
@@ -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
} }