set users permissions

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