diff --git a/src/common/enums/permission.enum.ts b/src/common/enums/permission.enum.ts index aa0dd69..7b902c5 100644 --- a/src/common/enums/permission.enum.ts +++ b/src/common/enums/permission.enum.ts @@ -25,12 +25,17 @@ export enum PermissionEnum { DELETE_ORDER = 'delete_order', + CREATE_USER = 'create_user', + UPDATE_USER = 'update_user', + DELETE_USER = 'delete_user', + VIEW_USERS = 'view_users', + + // User & Admin Management MANAGE_ADMINS = 'manage_admins', // Role Management MANAGE_ROLES = 'manage_roles', - MANAGE_USERS = 'manage_users', MANAGE_PAYMENTS = 'manage_payments', @@ -71,7 +76,6 @@ export const PermissionTitles: Record = { [PermissionEnum.ASSIGN_DESIGNER]: "اضافه کردن طراح به سفارش", [PermissionEnum.MANAGE_ADMINS]: 'مدیریت مدیران', - [PermissionEnum.MANAGE_USERS]: 'مدیریت کاربران', [PermissionEnum.MANAGE_ROLES]: 'مدیریت نقش‌ها', [PermissionEnum.MANAGE_PAYMENTS]: 'مدیریت پرداخت‌ها', [PermissionEnum.MANAGE_SETTINGS]: 'مدیریت تنظیمات', @@ -93,5 +97,9 @@ export const PermissionTitles: Record = { [PermissionEnum.MANAGE_ANNOUNCEMENTS]: "مدیریت اطلاعیه‌ها", [PermissionEnum.MANAGE_TICKETS]: "مدیریت تیکت‌ها", [PermissionEnum.NEW_REQUEST_NOTIFICATION]: "", - [PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "" + [PermissionEnum.NEW_PAYMENT_NOTIFICATION]: "", + [PermissionEnum.CREATE_USER]: "", + [PermissionEnum.UPDATE_USER]: "", + [PermissionEnum.DELETE_USER]: "", + [PermissionEnum.VIEW_USERS]: "" }; diff --git a/src/modules/user/controllers/users.controller.ts b/src/modules/user/controllers/users.controller.ts index d5007ba..bd98123 100644 --- a/src/modules/user/controllers/users.controller.ts +++ b/src/modules/user/controllers/users.controller.ts @@ -9,6 +9,8 @@ import { } from 'src/common/decorators'; import { FindUsersDto } from '../dto/find-user.dto'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { CreditService } from '../providers/credit.service'; +import { PermissionEnum } from 'src/common/enums/permission.enum'; +import { Permissions } from 'src/common/decorators/permissions.decorator'; @ApiTags('User') @ApiBearerAuth() @@ -41,29 +43,33 @@ export class UsersController { // =================== Admin ===================== @Post('admin/users') - @UseGuards(AuthGuard) + @UseGuards(AdminAuthGuard) + @Permissions(PermissionEnum.CREATE_USER) @ApiOperation({ summary: 'Create user ' }) createUser(@Body() dto: CreateUserAsAdminDto) { return this.userService.createUserAsAdmin(dto); } @Post('admin/users/:id') - @UseGuards(AuthGuard) + @UseGuards(AdminAuthGuard) + @Permissions(PermissionEnum.VIEW_USERS) @ApiOperation({ summary: 'find user ' }) findUser(@Param('id') id: string) { return this.userService.findById(id); } @Patch('admin/users/:id') - @UseGuards(AuthGuard) + @UseGuards(AdminAuthGuard) + @Permissions(PermissionEnum.UPDATE_USER) @ApiOperation({ summary: 'Update user ' }) upateUser(@Param('id') id: string, @Body() dto: UpdateUserAsAdminDto) { return this.userService.updateUser(id, dto); } @Delete('admin/users/:id') - @UseGuards(AuthGuard) - @ApiOperation({ summary: 'find user ' }) + @UseGuards(AdminAuthGuard) + @Permissions(PermissionEnum.DELETE_USER) + @ApiOperation({ summary: 'delete user ' }) deleteUser(@Param('id') id: string) { return this.userService.softDeleteUser(id); } @@ -72,10 +78,19 @@ export class UsersController { @Get('admin/users') @UseGuards(AdminAuthGuard) @ApiBearerAuth() - // @Permissions(Permission.MANAGE_USERS) - @ApiOperation({ summary: 'Get paginated list of restuarant users with filters' }) + @Permissions(PermissionEnum.VIEW_USERS) + @ApiOperation({ summary: 'Get paginated list of عسثقس users with filters' }) async findUsers( @Query() query: FindUsersDto) { return this.userService.findAll(query); } + + @Get('admin/users/search') + @UseGuards(AdminAuthGuard) + @ApiBearerAuth() + @ApiOperation({ summary: 'Search users by name or email' }) + async searchUsers( + @Query() query: FindUsersDto) { + return this.userService.findAll(query); + } } diff --git a/src/modules/user/dto/find-user.dto.ts b/src/modules/user/dto/find-user.dto.ts index ba3852b..b11211c 100644 --- a/src/modules/user/dto/find-user.dto.ts +++ b/src/modules/user/dto/find-user.dto.ts @@ -8,10 +8,7 @@ const sortOrderOptions = ['asc', 'desc'] as const; type SortOrder = (typeof sortOrderOptions)[number]; export class FindUsersDto { - /** - * The page number to retrieve. - * @default 1 - */ + @ApiPropertyOptional({ description: 'شماره صفحه', type: Number, @@ -24,10 +21,7 @@ export class FindUsersDto { @Type(() => Number) page?: number = 1; - /** - * The number of items per page. - * @default 10 - */ + @ApiPropertyOptional({ description: 'تعداد مورد در هر صفحه', type: Number, @@ -40,10 +34,7 @@ export class FindUsersDto { @Type(() => Number) limit?: number = 10; - /** - * A general search term to filter by. - * Searches firstName, lastName, phone, and nationalCode. - */ + @ApiPropertyOptional({ description: 'جستجو بر اساس نام، نام‌خانوادگی یا شماره تماس', type: String, @@ -52,10 +43,7 @@ export class FindUsersDto { @IsString() search?: string; - /** - * The field to sort the results by. - * @default "createdAt" - */ + @ApiPropertyOptional({ description: 'فیلد مرتب‌سازی', type: String, @@ -65,10 +53,7 @@ export class FindUsersDto { @IsString() orderBy?: keyof User = 'createdAt'; - /** - * The direction to sort the results. - * @default "desc" - */ + @ApiPropertyOptional({ description: 'جهت مرتب‌سازی (asc یا desc)', enum: sortOrderOptions,