refactor permissions

This commit is contained in:
2026-07-20 10:16:45 +03:30
parent c82cc654f0
commit 6b222db890
32 changed files with 765 additions and 172 deletions
@@ -0,0 +1,300 @@
import { MigrationInterface, QueryRunner } from "typeorm";
type CrudResource = {
old: string;
group: string;
titles: { create: string; read: string; update: string; delete: string };
};
const CRUD_RESOURCES: CrudResource[] = [
{
old: "services",
group: "services",
titles: { create: "ایجاد سرویس‌ها", read: "مشاهده سرویس‌ها", update: "ویرایش سرویس‌ها", delete: "حذف سرویس‌ها" },
},
{
old: "customers",
group: "customers",
titles: { create: "ایجاد مشتریان", read: "مشاهده مشتریان", update: "ویرایش مشتریان", delete: "حذف مشتریان" },
},
{
old: "agents",
group: "representatives",
titles: { create: "ایجاد نمایندگان", read: "مشاهده نمایندگان", update: "ویرایش نمایندگان", delete: "حذف نمایندگان" },
},
{
old: "developers",
group: "users",
titles: {
create: "ایجاد توسعه‌دهندگان",
read: "مشاهده توسعه‌دهندگان",
update: "ویرایش توسعه‌دهندگان",
delete: "حذف توسعه‌دهندگان",
},
},
{
old: "invoices",
group: "financial",
titles: { create: "ایجاد صورتحساب‌ها", read: "مشاهده صورتحساب‌ها", update: "ویرایش صورتحساب‌ها", delete: "حذف صورتحساب‌ها" },
},
{
old: "transactions",
group: "financial",
titles: { create: "ایجاد تراکنش‌ها", read: "مشاهده تراکنش‌ها", update: "ویرایش تراکنش‌ها", delete: "حذف تراکنش‌ها" },
},
{
old: "discounts",
group: "financial",
titles: { create: "ایجاد تخفیف‌ها", read: "مشاهده تخفیف‌ها", update: "ویرایش تخفیف‌ها", delete: "حذف تخفیف‌ها" },
},
{
old: "admins",
group: "users",
titles: { create: "ایجاد ادمین‌ها", read: "مشاهده ادمین‌ها", update: "ویرایش ادمین‌ها", delete: "حذف ادمین‌ها" },
},
{
old: "tickets",
group: "support",
titles: { create: "ایجاد تیکت‌ها", read: "مشاهده تیکت‌ها", update: "ویرایش تیکت‌ها", delete: "حذف تیکت‌ها" },
},
{
old: "criticisms",
group: "other",
titles: { create: "ایجاد انتقادات", read: "مشاهده انتقادات", update: "ویرایش انتقادات", delete: "حذف انتقادات" },
},
{
old: "contacts_us",
group: "other",
titles: { create: "ایجاد تماس با ما", read: "مشاهده تماس با ما", update: "ویرایش تماس با ما", delete: "حذف تماس با ما" },
},
{
old: "advertisements",
group: "content",
titles: { create: "ایجاد تبلیغات", read: "مشاهده تبلیغات", update: "ویرایش تبلیغات", delete: "حذف تبلیغات" },
},
{
old: "announcements",
group: "content",
titles: { create: "ایجاد اطلاعیه‌ها", read: "مشاهده اطلاعیه‌ها", update: "ویرایش اطلاعیه‌ها", delete: "حذف اطلاعیه‌ها" },
},
{
old: "blogs",
group: "content",
titles: { create: "ایجاد بلاگ‌ها", read: "مشاهده بلاگ‌ها", update: "ویرایش بلاگ‌ها", delete: "حذف بلاگ‌ها" },
},
{
old: "learnings",
group: "content",
titles: { create: "ایجاد آموزش‌ها", read: "مشاهده آموزش‌ها", update: "ویرایش آموزش‌ها", delete: "حذف آموزش‌ها" },
},
{
old: "settings",
group: "other",
titles: { create: "ایجاد تنظیمات", read: "مشاهده تنظیمات", update: "ویرایش تنظیمات", delete: "حذف تنظیمات" },
},
{
old: "bank_accounts",
group: "financial",
titles: {
create: "ایجاد حساب‌های بانکی",
read: "مشاهده حساب‌های بانکی",
update: "ویرایش حساب‌های بانکی",
delete: "حذف حساب‌های بانکی",
},
},
{
old: "payments",
group: "financial",
titles: { create: "ایجاد پرداخت‌ها", read: "مشاهده پرداخت‌ها", update: "ویرایش پرداخت‌ها", delete: "حذف پرداخت‌ها" },
},
{
old: "support_plan",
group: "support",
titles: {
create: "ایجاد پلن پشتیبانی",
read: "مشاهده پلن پشتیبانی",
update: "ویرایش پلن پشتیبانی",
delete: "حذف پلن پشتیبانی",
},
},
{
old: "reseller",
group: "representatives",
titles: {
create: "ایجاد نمایندگی فروش",
read: "مشاهده نمایندگی فروش",
update: "ویرایش نمایندگی فروش",
delete: "حذف نمایندگی فروش",
},
},
{
old: "workspace",
group: "task_manager",
titles: { create: "ایجاد فضای کار", read: "مشاهده فضای کار", update: "ویرایش فضای کار", delete: "حذف فضای کار" },
},
{
old: "project",
group: "task_manager",
titles: { create: "ایجاد پروژه", read: "مشاهده پروژه", update: "ویرایش پروژه", delete: "حذف پروژه" },
},
{
old: "task",
group: "task_manager",
titles: { create: "ایجاد وظیفه", read: "مشاهده وظیفه", update: "ویرایش وظیفه", delete: "حذف وظیفه" },
},
{
old: "task_phase",
group: "task_manager",
titles: { create: "ایجاد فاز وظیفه", read: "مشاهده فاز وظیفه", update: "ویرایش فاز وظیفه", delete: "حذف فاز وظیفه" },
},
];
const SINGLE_PERMISSIONS: { name: string; group: string; title: string }[] = [
{ name: "logs", group: "other", title: "لاگ‌ها" },
{ name: "manage_sso_clients", group: "other", title: "مدیریت کلاینت‌های SSO" },
{ name: "dmenu", group: "products", title: "دی‌منو" },
{ name: "dkala", group: "products", title: "دی‌کالا" },
{ name: "dpage", group: "products", title: "دی‌پیج" },
{ name: "dmail", group: "products", title: "دی‌میل" },
{ name: "view_all_workspaces", group: "task_manager", title: "مشاهده همه فضاهای کار" },
{ name: "view_all_projects", group: "task_manager", title: "مشاهده همه پروژه‌ها" },
];
const NEW_ENUM_VALUES = [
...CRUD_RESOURCES.flatMap((r) => [`${r.old}_create`, `${r.old}_read`, `${r.old}_update`, `${r.old}_delete`]),
...SINGLE_PERMISSIONS.map((p) => p.name),
];
const OLD_ENUM_VALUES = [
"services",
"customers",
"agents",
"developers",
"invoices",
"transactions",
"discounts",
"admins",
"tickets",
"criticisms",
"contacts_us",
"advertisements",
"announcements",
"blogs",
"learnings",
"logs",
"settings",
"bank_accounts",
"payments",
"manage_sso_clients",
"support_plan",
"dmenu",
"dkala",
"dpage",
"dmail",
"reseller",
"workspace",
"view_all_workspaces",
"project",
"view_all_projects",
"task",
"task_phase",
];
export class RefactorPermissionsToCrudAndGroup1784500000000 implements MigrationInterface {
name = "RefactorPermissionsToCrudAndGroup1784500000000";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."permission_group_enum" AS ENUM('services', 'customers', 'users', 'financial', 'content', 'support', 'other', 'products', 'representatives', 'task_manager')`,
);
await queryRunner.query(`ALTER TABLE "permission" ADD "group" "public"."permission_group_enum"`);
await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE text USING "name"::text`);
await queryRunner.query(`DROP TYPE "public"."permission_name_enum"`);
for (const resource of CRUD_RESOURCES) {
const oldPerm = await queryRunner.query(`SELECT id FROM "permission" WHERE "name" = $1`, [resource.old]);
if (!oldPerm.length) continue;
const oldId = oldPerm[0].id as string;
const actions = ["create", "read", "update", "delete"] as const;
for (const action of actions) {
const newName = `${resource.old}_${action}`;
const title = resource.titles[action];
const inserted = await queryRunner.query(
`INSERT INTO "permission" ("id", "name", "title", "group", "createdAt", "updatedAt")
VALUES (uuid_generate_v4(), $1, $2, $3, NOW(), NOW())
RETURNING id`,
[newName, title, resource.group],
);
const newId = inserted[0].id as string;
await queryRunner.query(
`INSERT INTO "role_permission_relation" ("roleId", "permissionId")
SELECT "roleId", $1 FROM "role_permission_relation" WHERE "permissionId" = $2
ON CONFLICT ("roleId", "permissionId") DO NOTHING`,
[newId, oldId],
);
}
await queryRunner.query(`DELETE FROM "role_permission_relation" WHERE "permissionId" = $1`, [oldId]);
await queryRunner.query(`DELETE FROM "permission" WHERE "id" = $1`, [oldId]);
}
for (const perm of SINGLE_PERMISSIONS) {
await queryRunner.query(`UPDATE "permission" SET "group" = $1, "title" = COALESCE(NULLIF("title", ''), $2) WHERE "name" = $3`, [
perm.group,
perm.title,
perm.name,
]);
}
await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "group" SET NOT NULL`);
const enumList = NEW_ENUM_VALUES.map((v) => `'${v}'`).join(", ");
await queryRunner.query(`CREATE TYPE "public"."permission_name_enum" AS ENUM(${enumList})`);
await queryRunner.query(
`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum" USING "name"::"public"."permission_name_enum"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE text USING "name"::text`);
await queryRunner.query(`DROP TYPE "public"."permission_name_enum"`);
for (const resource of CRUD_RESOURCES) {
const actions = ["create", "read", "update", "delete"];
const crudRows = await queryRunner.query(`SELECT id, name FROM "permission" WHERE "name" LIKE $1`, [`${resource.old}_%`]);
if (!crudRows.length) continue;
const inserted = await queryRunner.query(
`INSERT INTO "permission" ("id", "name", "title", "group", "createdAt", "updatedAt")
VALUES (uuid_generate_v4(), $1, $2, $3, NOW(), NOW())
RETURNING id`,
[resource.old, resource.old, resource.group],
);
const oldId = inserted[0].id as string;
for (const row of crudRows) {
await queryRunner.query(
`INSERT INTO "role_permission_relation" ("roleId", "permissionId")
SELECT "roleId", $1 FROM "role_permission_relation" WHERE "permissionId" = $2
ON CONFLICT ("roleId", "permissionId") DO NOTHING`,
[oldId, row.id],
);
await queryRunner.query(`DELETE FROM "role_permission_relation" WHERE "permissionId" = $1`, [row.id]);
await queryRunner.query(`DELETE FROM "permission" WHERE "id" = $1`, [row.id]);
}
}
const oldEnumList = OLD_ENUM_VALUES.map((v) => `'${v}'`).join(", ");
await queryRunner.query(`CREATE TYPE "public"."permission_name_enum" AS ENUM(${oldEnumList})`);
await queryRunner.query(
`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum" USING "name"::"public"."permission_name_enum"`,
);
await queryRunner.query(`ALTER TABLE "permission" DROP COLUMN "group"`);
await queryRunner.query(`DROP TYPE "public"."permission_group_enum"`);
}
}
+6 -6
View File
@@ -19,41 +19,41 @@ export class AdsController {
@ApiOperation({ summary: "Create new ads" })
@Post()
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_CREATE)
createAds(@Body() createDto: CreateAdsDto) {
return this.adsService.createAds(createDto);
}
@ApiOperation({ summary: "Get all ads" })
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_READ)
@Get("list")
getAdsList(@Query() queryDto: AdsSearchQueryDto) {
return this.adsService.getAdsList(queryDto);
}
@ApiOperation({ summary: "Get ads by id" })
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_READ)
@Get(":id")
getAdsById(@Param() paramDto: ParamDto) {
return this.adsService.getAdsById(paramDto.id);
}
@ApiOperation({ summary: "Update ads by id" })
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_UPDATE)
@Patch(":id")
updateAdsById(@Param() paramDto: ParamDto, @Body() updateDto: UpdateAdsDto) {
return this.adsService.updateAdsById(paramDto.id, updateDto);
}
@ApiOperation({ summary: "Delete ads by id" })
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_DELETE)
@Delete(":id")
deleteAdsById(@Param() paramDto: ParamDto) {
return this.adsService.deleteAdsById(paramDto.id);
}
@ApiOperation({ summary: "Toggle ads status" })
@PermissionsDec(PermissionEnum.ADVERTISEMENTS)
@PermissionsDec(PermissionEnum.ADVERTISEMENTS_UPDATE)
@Patch("toggle-status/:id")
toggleAdsStatus(@Param() paramDto: ParamDto) {
return this.adsService.toggleAdsStatus(paramDto.id);
@@ -16,14 +16,14 @@ import { PermissionEnum } from "../users/enums/permission.enum";
export class AnnouncementController {
constructor(private readonly announcementService: AnnouncementService) {}
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS)
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS_CREATE)
@ApiProperty({ description: "Create a new announcement (admin route)" })
@Post()
create(@Body() createAnnouncementDto: CreateAnnouncementDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.announcementService.createAnnouncement(createAnnouncementDto, userIpAndHeaders);
}
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS)
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS_UPDATE)
@ApiProperty({ description: "Update an announcement (admin route)" })
@Patch(":id")
update(
@@ -34,7 +34,7 @@ export class AnnouncementController {
return this.announcementService.updateAnnouncement(paramDto.id, updateAnnouncementDto, userIpAndHeaders);
}
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS)
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS_DELETE)
@ApiProperty({ description: "Delete an announcement (admin route)" })
@Delete(":id")
delete(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
@@ -42,7 +42,7 @@ export class AnnouncementController {
}
@ApiProperty({ description: "Get all announcements (admin route)" })
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS)
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS_READ)
@Get()
getAnnouncements(@Query() queryDto: SearchAnnouncementQueryDto) {
return this.announcementService.getAnnouncements(queryDto);
@@ -61,7 +61,7 @@ export class AnnouncementController {
}
@ApiProperty({ description: "Get one announcements with id (admin route)" })
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS)
@PermissionsDec(PermissionEnum.ANNOUNCEMENTS_READ)
@Get(":id/admin")
getAnnouncementByIdAdmin(@Param() paramDto: ParamDto) {
return this.announcementService.getAnnouncementByIdAdmin(paramDto.id);
+13 -13
View File
@@ -51,7 +51,7 @@ export class BlogsController {
@ApiOperation({ summary: "Get all blogs (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_READ)
@Get("list")
getBlogList(@Query() queryDto: BlogListSearchQueryDto) {
return this.blogsService.getBlogList(queryDto);
@@ -85,7 +85,7 @@ export class BlogsController {
}
@ApiOperation({ summary: "toggle status of blogs (admin route)" })
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
@HttpCode(HttpStatus.OK)
@Post(":id/toggle-status")
toggleBlogStatus(@Param() paramDto: ParamDto) {
@@ -103,7 +103,7 @@ export class BlogsController {
@ApiOperation({ summary: "Toggle pinned status of a blog (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
@Post(":id/toggle-pinned")
togglePinnedStatus(@Param() paramDto: ParamDto) {
return this.blogsService.togglePinnedStatus(paramDto.id);
@@ -112,7 +112,7 @@ export class BlogsController {
@ApiOperation({ summary: "Create a new blog (admin route)" })
@Post()
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
createBlog(@Body() createBlogDto: CreateBlogDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.blogsService.createBlog(createBlogDto, userIpAndHeaders);
}
@@ -120,7 +120,7 @@ export class BlogsController {
@ApiOperation({ summary: "Update a blog (admin route)" })
@Patch(":id")
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_UPDATE)
updateBlog(@Param() paramDto: ParamDto, @Body() updateBlogDto: UpdateBlogDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.blogsService.updateBlog(paramDto.id, updateBlogDto, userIpAndHeaders);
}
@@ -128,7 +128,7 @@ export class BlogsController {
@ApiOperation({ summary: "Delete a blog (admin route) " })
@Delete(":id")
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_DELETE)
deleteBlog(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.blogsService.deleteBlog(paramDto.id, userIpAndHeaders);
}
@@ -149,7 +149,7 @@ export class BlogsController {
@ApiOperation({ summary: "Get all comments for a blog (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_READ)
@Get(":id/comments")
getBlogCommentsForAdmin(@Param() paramDto: ParamDto) {
return this.blogCommentService.getBlogCommentsForAdmin(paramDto.id);
@@ -157,7 +157,7 @@ export class BlogsController {
@ApiOperation({ summary: "Get all comments for a blog (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_READ)
@Get("comments")
getAllCommentForAdmin(@Query() queryDto: BlogCommentQueryDto) {
return this.blogCommentService.getAllCommentForAdmin(queryDto);
@@ -165,7 +165,7 @@ export class BlogsController {
@ApiOperation({ summary: "Update the status of a comment (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_UPDATE)
@Patch("comments/:id/status")
updateCommentStatus(@Param() paramDto: ParamDto, @Body() updateCommentStatusDto: UpdateCommentStatusDto) {
return this.blogCommentService.updateCommentStatus(paramDto.id, updateCommentStatusDto);
@@ -196,7 +196,7 @@ export class BlogsController {
@ApiOperation({ summary: "Create a new category (admin route)" })
@Post("categories")
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
createCategory(@Body() createCategoryDto: CreateBlogCategoryDto) {
return this.blogsService.createCategory(createCategoryDto);
}
@@ -204,7 +204,7 @@ export class BlogsController {
@ApiOperation({ summary: "Update a category (admin route)" })
@Patch("categories/:id")
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_UPDATE)
updateCategory(@Param() paramDto: ParamDto, @Body() updateCategoryDto: UpdateBlogCategoryDto) {
return this.blogsService.updateCategory(paramDto.id, updateCategoryDto);
}
@@ -212,13 +212,13 @@ export class BlogsController {
@ApiOperation({ summary: "Delete a category (admin route)" })
@Delete("categories/:id")
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_DELETE)
deleteCategory(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.blogsService.deleteCategory(paramDto.id, userIpAndHeaders);
}
@ApiOperation({ summary: "toggle status of categories (admin route)" })
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
@HttpCode(HttpStatus.OK)
@Post("categories/toggle-status/:id")
toggleCategoryStatus(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
@@ -25,7 +25,7 @@ export class ContactUsController {
//******************** */
@PermissionsDec(PermissionEnum.CONTACTS_US)
@PermissionsDec(PermissionEnum.CONTACTS_US_READ)
@AdminRoute()
@ApiOperation({ summary: "Get all contact us (admin route)" })
@Get()
@@ -36,7 +36,7 @@ export class ContactUsController {
//******************** */
@AdminRoute()
@PermissionsDec(PermissionEnum.CONTACTS_US)
@PermissionsDec(PermissionEnum.CONTACTS_US_READ)
@ApiOperation({ summary: "Get one contact us with id (admin route)" })
@Get(":id")
getOneContactUs(@Param() paramDto: ParamDto) {
@@ -23,7 +23,7 @@ export class CriticismController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.CRITICISMS)
@PermissionsDec(PermissionEnum.CRITICISMS_READ)
@ApiOperation({ summary: "Get all Criticism ===> login as admin" })
@Get()
findAll(@Query() queryDto: SearchCriticismQueryDto) {
@@ -31,7 +31,7 @@ export class CriticismController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.CRITICISMS)
@PermissionsDec(PermissionEnum.CRITICISMS_READ)
@ApiOperation({ summary: "Get one Criticism with id ===> login as admin" })
@Get(":id")
fineOne(@Param() paramDto: ParamDto) {
@@ -39,7 +39,7 @@ export class CriticismController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.CRITICISMS)
@PermissionsDec(PermissionEnum.CRITICISMS_DELETE)
@ApiOperation({ summary: "Delete one Criticism with id ===> login as admin" })
@Delete(":id")
delete(@Param() paramDto: ParamDto) {
@@ -37,7 +37,7 @@ export class DanakServicesController {
//------------------------ service categories ------------------------
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@ApiOperation({ summary: "Create a new service category => admin route" })
@Post("categories")
createCategory(@Body() createDto: CreateDanakServiceCategoryDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
@@ -45,7 +45,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@ApiOperation({ summary: "Get all service categories => admin route" })
@Get("categories")
getCategories(@Query() queryDto: CategorySearchQueryDto) {
@@ -53,7 +53,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@ApiOperation({ summary: "Get all service categories => admin route" })
@Pagination()
@Get("categories/list")
@@ -69,7 +69,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@ApiOperation({ summary: "Get category by id => admin route" })
@Get("categories/:id")
getCategoryById(@Param() paramDto: ParamDto) {
@@ -77,7 +77,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_UPDATE)
@ApiOperation({ summary: "update category by id => admin route" })
@Patch("categories/:id")
updateCategory(
@@ -89,7 +89,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_DELETE)
@ApiOperation({ summary: "delete category by id => admin route" })
@Delete("categories/:id")
deleteCategoryById(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
@@ -97,7 +97,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@ApiOperation({ summary: "toggle status of categories => admin route" })
@HttpCode(HttpStatus.OK)
@Post("categories/toggle-status/:id")
@@ -106,7 +106,7 @@ export class DanakServicesController {
}
//-------------------- service management --------------------------
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@ApiOperation({ summary: "create new danak services => admin route" })
@Post()
createService(@Body() createDto: CreateServiceDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
@@ -114,7 +114,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@ApiOperation({ summary: "get all danak services ==> admin route" })
@Get()
getServices(@Query() queryDto: DanakServicesSearchQueryDto) {
@@ -136,7 +136,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@ApiOperation({ summary: "toggle status of danak service => admin route" })
@HttpCode(HttpStatus.OK)
@Post("toggle-status/:id")
@@ -145,7 +145,7 @@ export class DanakServicesController {
}
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@ApiOperation({ summary: "toggle status of danak service slider => admin route" })
@HttpCode(HttpStatus.OK)
@Post("toggle-slider/:id")
@@ -192,7 +192,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "update danak service" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_UPDATE)
@Patch(":id")
updateDanakService(
@Param() paramDto: ParamDto,
@@ -204,7 +204,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "delete danak service" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_DELETE)
@Delete(":id")
deleteServiceById(@Param() paramDto: ParamDto) {
return this.danakServicesService.deleteServiceById(paramDto.id);
@@ -212,7 +212,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "get service users" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Get(":id/users")
getServiceUsers(@Param() paramDto: ParamDto) {
return this.danakServicesService.getServiceUsers(paramDto.id);
@@ -235,7 +235,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "get danak service reviews ==> admin route" })
@AuthGuards()
@Pagination()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Get("reviews")
getDanakServiceReviews(@Query() queryDto: DanakServiceReviewQueryDto) {
return this.danakServiceReviewService.getDanakServiceReviews(queryDto);
@@ -243,7 +243,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "update danak service review status ==> admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_UPDATE)
@Patch("reviews/:id/:status")
updateDanakServiceReviewStatus(@Param() updateParamDto: UpdateReviewStatusDto) {
return this.danakServiceReviewService.updateDanakServiceReviewStatus(updateParamDto);
@@ -252,7 +252,7 @@ export class DanakServicesController {
//------------------------ service guides ------------------------
@ApiOperation({ summary: "Create a service guide => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@Post("guides")
createServiceGuide(@Body() createDto: CreateServiceGuideDto) {
return this.danakServicesService.createServiceGuide(createDto);
@@ -266,7 +266,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "Update service guide => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_UPDATE)
@Patch("guides/:id")
updateServiceGuide(@Param() paramDto: ParamDto, @Body() updateDto: UpdateServiceGuideDto) {
return this.danakServicesService.updateServiceGuide(paramDto.id, updateDto);
@@ -274,7 +274,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "Delete service guide => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_DELETE)
@Delete("guides/:id")
@HttpCode(HttpStatus.NO_CONTENT)
deleteServiceGuide(@Param() paramDto: ParamDto) {
@@ -283,7 +283,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "Get service guide by id => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Get("guides/:id")
getServiceGuideById(@Param() paramDto: ParamDto) {
return this.danakServicesService.getServiceGuideById(paramDto.id);
@@ -299,7 +299,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "Get service feedbacks => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Pagination()
@Get("feedback")
getServiceFeedbacks(@Query() queryDto: ServiceFeedbackQueryDto) {
@@ -308,7 +308,7 @@ export class DanakServicesController {
@ApiOperation({ summary: "Get service feedback statistics => admin route" })
@AuthGuards()
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Get(":id/feedback")
getServiceFeedbackStats(@Param() paramDto: ParamDto) {
return this.danakServicesService.getServiceFeedback(paramDto.id);
@@ -19,7 +19,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Create a new discount" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_CREATE)
@Post()
@ApiResponse({ status: 201, description: "Discount created successfully" })
create(@Body() createDiscountDto: CreateDiscountDto) {
@@ -28,7 +28,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Get all discounts for admin" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_READ)
@Get()
@ApiResponse({ status: 200, description: "Discounts fetched successfully" })
getDiscountsForAdmin(@Query() queryDto: SearchDiscountQueryDto) {
@@ -37,7 +37,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Get discount by id" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_READ)
@Get(":id")
@ApiResponse({ status: 200, description: "Discount fetched successfully" })
getDiscountById(@Param() paramDto: ParamDto) {
@@ -46,7 +46,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Toggle discount status" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_CREATE)
@Post(":id/toggle-status")
toggleDiscountStatus(@Param() paramDto: ParamDto) {
return this.discountsService.toggleDiscountStatus(paramDto.id);
@@ -54,7 +54,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Delete discount" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_DELETE)
@Delete(":id")
deleteDiscount(@Param() paramDto: ParamDto) {
return this.discountsService.softDeleteDiscount(paramDto.id);
@@ -62,7 +62,7 @@ export class DiscountsController {
@ApiOperation({ summary: "Update discount" })
@AdminRoute()
@PermissionsDec(PermissionEnum.DISCOUNTS)
@PermissionsDec(PermissionEnum.DISCOUNTS_UPDATE)
@Patch(":id")
updateDiscount(@Param() paramDto: ParamDto, @Body() updateDiscountDto: UpdateDiscountDto) {
return this.discountsService.updateDiscount(paramDto.id, updateDiscountDto);
+4
View File
@@ -5,6 +5,8 @@ import { FindBusinessesDto } from './dto/find-businesses.dto';
import { AuthGuards } from '../../common/decorators/auth-guard.decorator';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { AdminRoute } from '../../common/decorators/admin.decorator';
import { PermissionsDec } from '../../common/decorators/permission.decorator';
import { PermissionEnum } from '../users/enums/permission.enum';
@Controller('dmail')
@ApiTags('d-mail')
@@ -15,6 +17,7 @@ export class DmailController {
@Get()
@AdminRoute()
@PermissionsDec(PermissionEnum.DMAIL)
findAll(@Query() query: FindBusinessesDto) {
return this.dmailService.findAllBusinesses(query)
}
@@ -27,6 +30,7 @@ export class DmailController {
@Patch(':id/active')
@AdminRoute()
@PermissionsDec(PermissionEnum.DMAIL)
update(@Param('id') id: string, @Body() updateDmailDto: UpdateDmailAciveStatusDto) {
return this.dmailService.updateDMailActiveStatus(id, updateDmailDto.isActive);
}
+4 -4
View File
@@ -21,28 +21,28 @@ export class InvoicesController {
constructor(private readonly invoiceService: InvoicesService) {}
@ApiOperation({ summary: "create an invoice ==> admin route" })
@PermissionsDec(PermissionEnum.INVOICES)
@PermissionsDec(PermissionEnum.INVOICES_CREATE)
@Post()
createInvoice(@Body() createDto: CreateInvoiceDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.invoiceService.createInvoiceAdmin(createDto, userIpAndHeaders);
}
@ApiOperation({ summary: "update an invoice ==> admin route" })
@PermissionsDec(PermissionEnum.INVOICES)
@PermissionsDec(PermissionEnum.INVOICES_UPDATE)
@Patch(":id")
updateInvoice(@Param() paramDto: ParamDto, @Body() updateDto: UpdateInvoiceDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.invoiceService.updateInvoiceAdmin(paramDto.id, updateDto, userIpAndHeaders);
}
@ApiOperation({ summary: "delete an invoice ==> admin route" })
@PermissionsDec(PermissionEnum.INVOICES)
@PermissionsDec(PermissionEnum.INVOICES_DELETE)
@Delete(":id")
deleteInvoice(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.invoiceService.deleteInvoiceAdmin(paramDto.id, userIpAndHeaders);
}
@ApiOperation({ summary: "get all invoices ==> admin route" })
@PermissionsDec(PermissionEnum.INVOICES)
@PermissionsDec(PermissionEnum.INVOICES_READ)
@Get()
getInvoices(@Query() queryDto: InvoicesSearchQueryDto) {
return this.invoiceService.getInvoices(queryDto);
+6 -6
View File
@@ -18,7 +18,7 @@ export class LearningController {
constructor(private readonly learningService: LearningService) {}
@ApiOperation({ summary: "Create learning video" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_CREATE)
@Post()
createLearningVideo(@Body() createDto: CreateLearningDto) {
return this.learningService.createLearningVideo(createDto);
@@ -37,14 +37,14 @@ export class LearningController {
}
@ApiOperation({ summary: "delete learning video by id" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_DELETE)
@Delete(":id")
deleteLearningVideoById(@Param() paramDto: ParamDto) {
return this.learningService.deleteLearningVideoById(paramDto.id);
}
@ApiOperation({ summary: "update learning video by id" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_UPDATE)
@Patch(":id")
updateLearningVideoById(@Param() paramDto: ParamDto, @Body() updateDto: UpdateLearningDto) {
return this.learningService.updateLearningVideo(paramDto.id, updateDto);
@@ -53,7 +53,7 @@ export class LearningController {
//----------------- category management ----------------------
@ApiOperation({ summary: "Create learning category" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_CREATE)
@Post("category")
createCategory(@Body() createDto: CreateLearningCategoryDto) {
return this.learningService.createLearningCategory(createDto);
@@ -72,14 +72,14 @@ export class LearningController {
}
@ApiOperation({ summary: "update learning category ==> admin route" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_UPDATE)
@Patch("category/:id")
updateLearningCategory(@Param() paramDto: ParamDto, @Body() updateDto: UpdateLearningCategoryDto) {
return this.learningService.updateLearningCategory(paramDto.id, updateDto);
}
@ApiOperation({ summary: "delete category by id" })
@PermissionsDec(PermissionEnum.LEARNINGS)
@PermissionsDec(PermissionEnum.LEARNINGS_DELETE)
@Delete("category/:id")
deleteCategoryById(@Param() paramDto: ParamDto) {
return this.learningService.deleteCategoryById(paramDto.id);
+7 -7
View File
@@ -45,7 +45,7 @@ export class PaymentsController {
}
@ApiOperation({ summary: "get deposit request of users ==> admin route" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_READ)
@AuthGuards()
@Pagination()
@Get("deposit/transfer")
@@ -54,7 +54,7 @@ export class PaymentsController {
}
@ApiOperation({ summary: "get deposit gateway payment ==> admin route" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_READ)
@AuthGuards()
@Pagination()
@Get("deposit/gateway")
@@ -63,7 +63,7 @@ export class PaymentsController {
}
@ApiOperation({ summary: "approve deposit request ==> admin route" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_UPDATE)
@AuthGuards()
@Post("deposit/transfer/approve/:id")
approverDepositRequest(@Param() paramDto: ParamDto) {
@@ -71,7 +71,7 @@ export class PaymentsController {
}
@ApiOperation({ summary: "reject deposit request ==> admin route" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_UPDATE)
@AuthGuards()
@Post("deposit/transfer/reject/:id")
rejectDepositRequest(@Param() paramDto: ParamDto, @Body() rejectDto: RejectDepositRequestDto) {
@@ -79,7 +79,7 @@ export class PaymentsController {
}
@ApiOperation({ summary: "get transaction for admin" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_READ)
@AuthGuards()
@Pagination()
@Get("transactions")
@@ -108,7 +108,7 @@ export class PaymentsController {
///------------------- bank account -----------------------------
@AuthGuards()
@PermissionsDec(PermissionEnum.PAYMENTS, PermissionEnum.BANK_ACCOUNTS)
@PermissionsDec(PermissionEnum.PAYMENTS_CREATE, PermissionEnum.BANK_ACCOUNTS_CREATE)
@ApiOperation({ summary: "add bank account for transfer and deposit ==> admin route" })
@Post("bank-account")
addBankAccount(@Body() createDto: CreateBankAccountDto) {
@@ -124,7 +124,7 @@ export class PaymentsController {
@AuthGuards()
@ApiOperation({ summary: "update bank account with its id" })
@PermissionsDec(PermissionEnum.PAYMENTS, PermissionEnum.BANK_ACCOUNTS)
@PermissionsDec(PermissionEnum.PAYMENTS_UPDATE, PermissionEnum.BANK_ACCOUNTS_UPDATE)
@Patch("bank-account/:id")
updateBankAccount(@Body() updateDto: UpdateBankAccountDto, @Param() paramDto: ParamDto) {
return this.paymentsService.updateBankAccount(updateDto, paramDto.id);
+4 -4
View File
@@ -34,7 +34,7 @@ export class ResellerController {
//***************** DSC Endpoints **************** */
@ApiOperation({ summary: "Create reseller ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.RESELLER)
@PermissionsDec(PermissionEnum.RESELLER_CREATE)
@Post()
createReseller(@Body() dto: CreateResellerDto) {
return this.resellerService.create(dto);
@@ -42,7 +42,7 @@ export class ResellerController {
@ApiOperation({ summary: "Get resellers ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.RESELLER)
@PermissionsDec(PermissionEnum.RESELLER_READ)
@Get()
getResellers() {
return this.resellerService.findAll();
@@ -52,7 +52,7 @@ export class ResellerController {
@ApiOperation({ summary: "Get withdraw requests ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.RESELLER)
@PermissionsDec(PermissionEnum.RESELLER_READ)
@Pagination()
@Get("withdraw-request/admin")
getRewardRequests(@Query() query: SearchWithdrawRequestQueryDto) {
@@ -61,7 +61,7 @@ export class ResellerController {
@ApiOperation({ summary: "Confirm withdraw request ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.RESELLER)
@PermissionsDec(PermissionEnum.RESELLER_UPDATE)
@Patch("withdraw-request/:id")
confirmWithdrawRequests(@Param() paramDto: ParamDto, @Body() dto: ConfirmwithdrawRequestDto) {
return this.resellerService.confirmWithdrawRequest(paramDto.id, dto.transactionId);
+5 -5
View File
@@ -18,7 +18,7 @@ export class SlidersController {
@ApiOperation({ summary: "create slider (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_CREATE)
@Post()
create(@Body() createSliderDto: CreateSliderDto) {
return this.slidersService.create(createSliderDto);
@@ -26,7 +26,7 @@ export class SlidersController {
@ApiOperation({ summary: "Get all sliders (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_READ)
@Get()
getSlidersList(@Query() queryDto: PaginationDto) {
return this.slidersService.getSlidersList(queryDto);
@@ -34,7 +34,7 @@ export class SlidersController {
@ApiOperation({ summary: "Get a slider by id (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_READ)
@Get(":id")
getSliderById(@Param() paramDto: ParamDto) {
return this.slidersService.getSliderById(paramDto.id);
@@ -42,7 +42,7 @@ export class SlidersController {
@ApiOperation({ summary: "Update a slider (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_UPDATE)
@Patch(":id")
update(@Param() paramDto: ParamDto, @Body() updateSliderDto: UpdateSliderDto) {
return this.slidersService.update(paramDto.id, updateSliderDto);
@@ -50,7 +50,7 @@ export class SlidersController {
@ApiOperation({ summary: "Delete a slider (admin route)" })
@AdminRoute()
@PermissionsDec(PermissionEnum.BLOGS)
@PermissionsDec(PermissionEnum.BLOGS_DELETE)
@Delete(":id")
remove(@Param() paramDto: ParamDto) {
return this.slidersService.remove(paramDto.id);
@@ -31,7 +31,7 @@ export class SubscriptionsController {
) {}
@ApiOperation({ summary: "Delete subscription =. admin route" })
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_DELETE)
@AdminRoute()
@Delete(':id')
deleteSubscription(@Param('id') id :string) {
@@ -39,14 +39,14 @@ export class SubscriptionsController {
}
@ApiOperation({ summary: "Create a subscription plan" })
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@Post()
createSubscription(@Body() createDto: AddSubscriptionsToServiceDto) {
return this.subscriptionService.createSubscriptionsPlan(createDto);
}
@ApiOperation({ summary: "get all subscription plans" })
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
@Get("service/:serviceId")
getServiceSubscriptions(@Param() paramDto: ServiceIdParamDto, @Query() queryDto: ServiceSubsQueryDto) {
return this.subscriptionService.getServiceSubscriptions(paramDto.serviceId, queryDto);
@@ -65,7 +65,7 @@ export class SubscriptionsController {
}
@ApiOperation({ summary: "toggle status of service subs" })
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_CREATE)
@Post("toggle-status/:id")
toggleStatusOfServiceSub(@Param() paramDto: ParamDto) {
return this.subscriptionService.toggleSubStatus(paramDto.id);
@@ -73,14 +73,14 @@ export class SubscriptionsController {
@ApiOperation({ summary: "get a subscription plan by id" })
@Get(":id")
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_READ)
getSubscription(@Param() paramDto: ParamDto) {
return this.subscriptionService.getSubscriptionPlanById(paramDto.id);
}
@ApiOperation({ summary: "update a subscription plan by id" })
@Patch(":id")
@PermissionsDec(PermissionEnum.SERVICES)
@PermissionsDec(PermissionEnum.SERVICES_UPDATE)
updateSubscription(@Param() paramDto: ParamDto, @Body() updateDto: UpdateSubscriptionPlanDto) {
return this.subscriptionService.updateSubscriptionPlan(paramDto.id, updateDto);
}
@@ -144,7 +144,7 @@ export class SubscriptionsController {
}
@ApiOperation({ summary: "get all user subscriptions with pagination and filters ==> admin route" })
@PermissionsDec(PermissionEnum.PAYMENTS)
@PermissionsDec(PermissionEnum.PAYMENTS_READ)
@Get("admin/user-subscriptions/all")
getAllUserSubscriptions(@Query() queryDto: AdminUserSubscriptionsQueryDto) {
return this.subscriptionService.getAllUserSubscriptions(queryDto);
@@ -19,7 +19,7 @@ export class SupportPlansController {
constructor(private readonly supportPlansService: SupportPlansService) {}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_CREATE)
@ApiOperation({ summary: "Create a new support plan (admin)" })
@Post()
createSupportPlan(@Body() createSupportPlanDto: CreateSupportPlanDto) {
@@ -27,7 +27,7 @@ export class SupportPlansController {
}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_READ)
@ApiOperation({ summary: "Get all support plans (admin)" })
@Get("list")
getSupportPlansList(@Query() queryDto: GetSupportPlanListQueryDto) {
@@ -35,7 +35,7 @@ export class SupportPlansController {
}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_READ)
@ApiOperation({ summary: "Get a support plan by id (admin)" })
@Get(":id")
getSupportPlanById(@Param() paramDto: ParamDto) {
@@ -43,7 +43,7 @@ export class SupportPlansController {
}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_DELETE)
@ApiOperation({ summary: "Delete a support plan by id (admin)" })
@Delete(":id")
deleteSupportPlanById(@Param() paramDto: ParamDto) {
@@ -51,7 +51,7 @@ export class SupportPlansController {
}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_UPDATE)
@ApiOperation({ summary: "Update a support plan by id (admin)" })
@Patch(":id")
updateSupportPlanById(@Param() paramDto: ParamDto, @Body() updateSupportPlanDto: UpdateSupportPlanDto) {
@@ -71,7 +71,7 @@ export class SupportPlansController {
}
@AdminRoute()
@PermissionsDec(PermissionEnum.SUPPORT_PLAN)
@PermissionsDec(PermissionEnum.SUPPORT_PLAN_READ)
@ApiOperation({ summary: "Get support plan users (admin)" })
@Get(":id/users")
getSupportPlanUsers(@Param() paramDto: ParamDto, @Query() queryDto: SearchSupportPlanUsersQueryDto) {
@@ -30,7 +30,7 @@ export class ProjectController {
}
@Post()
@PermissionsDec(PermissionEnum.PROJECT)
@PermissionsDec(PermissionEnum.PROJECT_CREATE)
@ApiOperation({ summary: "Create a new project" })
@ApiResponse({ status: 201, description: "Project created", type: TMProject })
@ApiResponse({ status: 400, description: "One or more users are not members of the workspace" })
@@ -40,7 +40,7 @@ export class ProjectController {
}
@Patch(":id")
@PermissionsDec(PermissionEnum.PROJECT)
@PermissionsDec(PermissionEnum.PROJECT_UPDATE)
@ApiOperation({ summary: "Update a project" })
@ApiParam({ name: "id", description: "Project ID" })
@ApiResponse({ status: 200, description: "Project updated", type: TMProject })
@@ -51,7 +51,7 @@ export class ProjectController {
}
@Delete(":id")
@PermissionsDec(PermissionEnum.PROJECT)
@PermissionsDec(PermissionEnum.PROJECT_DELETE)
@ApiOperation({ summary: "Delete a project" })
@ApiParam({ name: "id", description: "Project ID" })
@ApiResponse({ status: 200, description: "Project deleted", type: TMProject })
@@ -11,13 +11,13 @@ import { PermissionEnum } from "../../users/enums/permission.enum";
@AuthGuards()
@AdminRoute()
@PermissionsDec(PermissionEnum.TASK_PHASE)
@ApiTags("Task Manager - Task Phases")
@Controller("task-manager/task-phases")
export class TaskPhaseController {
constructor(private readonly taskPhaseService: TaskPhaseService) {}
@Post()
@PermissionsDec(PermissionEnum.TASK_PHASE_CREATE)
@ApiOperation({ summary: "Create a new task phase" })
@ApiResponse({ status: 201, description: "TaskPhase created", type: TMTaskPhase })
@ApiResponse({ status: 404, description: "Project not found" })
@@ -26,6 +26,7 @@ export class TaskPhaseController {
}
@Patch(":id")
@PermissionsDec(PermissionEnum.TASK_PHASE_UPDATE)
@ApiOperation({ summary: "Update a task phase" })
@ApiParam({ name: "id", description: "TaskPhase ID" })
@ApiResponse({ status: 200, description: "TaskPhase updated", type: TMTaskPhase })
@@ -35,6 +36,7 @@ export class TaskPhaseController {
}
@Delete(":id")
@PermissionsDec(PermissionEnum.TASK_PHASE_DELETE)
@ApiOperation({ summary: "Delete a task phase" })
@ApiParam({ name: "id", description: "TaskPhase ID" })
@ApiResponse({ status: 200, description: "TaskPhase deleted" })
@@ -23,7 +23,7 @@ export class TaskController {
constructor(private readonly taskService: TaskService) {}
@Post()
@PermissionsDec(PermissionEnum.TASK)
@PermissionsDec(PermissionEnum.TASK_CREATE)
@ApiOperation({ summary: "Create a new task" })
@ApiResponse({ status: 201, description: "Task created", type: TMTask })
@ApiResponse({ status: 404, description: "TaskPhase not found" })
@@ -32,7 +32,7 @@ export class TaskController {
}
@Patch(":id")
@PermissionsDec(PermissionEnum.TASK)
@PermissionsDec(PermissionEnum.TASK_UPDATE)
@ApiOperation({ summary: "Update a task" })
@ApiParam({ name: "id", description: "Task ID" })
@ApiResponse({ status: 200, description: "Task updated", type: TMTask })
@@ -42,18 +42,17 @@ export class TaskController {
}
@Patch(":id/change-phase")
@PermissionsDec(PermissionEnum.TASK)
@ApiOperation({ summary: "Move a task to a different phase within the same project" })
@ApiParam({ name: "id", description: "Task ID" })
@ApiResponse({ status: 200, description: "Task phase changed", type: TMTask })
@ApiResponse({ status: 400, description: "Target phase belongs to a different project" })
@ApiResponse({ status: 404, description: "Task or TaskPhase not found" })
changePhase(@Param("id") id: string, @Body() body: ChangeTaskPhaseDto): Promise<TMTask> {
return this.taskService.changePhase(id, body);
changePhase(@Param("id") id: string,@UserDec() user: ITokenPayload, @Body() body: ChangeTaskPhaseDto): Promise<TMTask> {
return this.taskService.changePhase(id, user.permissions, user.id, body);
}
@Delete(":id")
@PermissionsDec(PermissionEnum.TASK)
@PermissionsDec(PermissionEnum.TASK_DELETE)
@ApiOperation({ summary: "Delete a task" })
@ApiParam({ name: "id", description: "Task ID" })
@ApiResponse({ status: 200, description: "Task deleted" })
@@ -98,7 +97,7 @@ export class TaskController {
@ApiResponse({ status: 200, description: "Changed the task priority successfully!" })
@ApiResponse({ status: 400, description: "Bad Request from user." })
@ApiResponse({ status: 404, description: "Task not found!" })
changePriority(@Param("srcid") srcId: string, @Param("desid") desId: string): Promise<TMTask> {
return this.taskService.changePriority(srcId, desId);
changePriority(@Param("srcid") srcId: string, @Param("desid") desId: string,@UserDec() user: ITokenPayload): Promise<TMTask> {
return this.taskService.changePriority(srcId, user.permissions, user.id, desId);
}
}
@@ -19,7 +19,7 @@ export class WorkspaceController {
constructor(private readonly workspaceService: WorkspaceService) {}
@Get(':id')
@PermissionsDec(PermissionEnum.WORKSPACE)
@PermissionsDec(PermissionEnum.WORKSPACE_READ)
@ApiOperation({summary: "Get one workspace by ID"})
@ApiResponse({status: 200, description: 'Received workspace', type: TMWorkspace})
@ApiResponse({status: 404, description: 'Workspace Not Found!'})
@@ -29,7 +29,7 @@ export class WorkspaceController {
}
@Post()
@PermissionsDec(PermissionEnum.WORKSPACE)
@PermissionsDec(PermissionEnum.WORKSPACE_CREATE)
@ApiOperation({ summary: 'Create a new workspace' })
@ApiResponse({ status: 201, description: 'Workspace created', type: TMWorkspace })
create(@Body() body: CreateWorkspaceDto): Promise<TMWorkspace> {
@@ -37,7 +37,7 @@ export class WorkspaceController {
}
@Patch(':id')
@PermissionsDec(PermissionEnum.WORKSPACE)
@PermissionsDec(PermissionEnum.WORKSPACE_UPDATE)
@ApiOperation({ summary: 'Update a workspace' })
@ApiParam({ name: 'id', description: 'Workspace ID' })
@ApiResponse({ status: 200, description: 'Workspace updated', type: TMWorkspace })
@@ -47,7 +47,7 @@ export class WorkspaceController {
}
@Delete(':id')
@PermissionsDec(PermissionEnum.WORKSPACE)
@PermissionsDec(PermissionEnum.WORKSPACE_DELETE)
@ApiOperation({ summary: 'Delete a workspace' })
@ApiParam({ name: 'id', description: 'Workspace ID' })
@ApiResponse({ status: 200, description: 'Workspace deleted' })
@@ -131,7 +131,7 @@ export class ProjectService {
const limit = pagination.limit ?? 10;
const skip = (page - 1) * limit;
const isPermissionIncluded = permissions.includes(PermissionEnum.VIEW_ALL_PROJECTS);
const isPermissionIncluded = permissions.includes(PermissionEnum.PROJECT_READ);
const isUserMemeberOfWorkspace = workspace.users.some((user) => user.id === userId);
var res: [TMProject[], number];
@@ -158,7 +158,7 @@ export class ProjectService {
if (!project) throw new NotFoundException(ProjectMessage.PROJECT_NOT_FOUND);
const isUserMember = project.users.some((user) => user.id === userId);
if (!isUserMember && !permissions.includes(PermissionEnum.VIEW_ALL_PROJECTS))
if (!isUserMember && !permissions.includes(PermissionEnum.PROJECT_READ))
throw new ForbiddenException(ProjectMessage.NOT_MEMBER_OF_PROJECT);
const projectDetail = await this.projectRepository.getProjectDetail(projectId);
@@ -98,9 +98,13 @@ export class TaskService {
return this.taskRepository.save(task);
}
async changePhase(id: string, dto: ChangeTaskPhaseDto): Promise<TMTask> {
async changePhase(id: string,permissions: PermissionEnum[],userId: string, dto: ChangeTaskPhaseDto): Promise<TMTask> {
const task = await this.findOneOrFail(id);
const isTaskMember = task.users.some((user) => user.id === userId);
const hasPermission = permissions.includes(PermissionEnum.TASK_UPDATE);
if (!isTaskMember && !hasPermission) throw new ForbiddenException(TaskMessage.USER_NOT_TASK_MEMBER);
const newPhase = await this.findTaskPhaseOrFail(dto.taskPhaseId);
if (task.taskPhase.projectId !== newPhase.projectId) {
@@ -122,7 +126,7 @@ export class TaskService {
const task = await this.findOneOrFail(taskId);
const isTaskMember = task.users.some((user) => user.id === userId);
const hasPermission = permissions.includes(PermissionEnum.TASK);
const hasPermission = permissions.includes(PermissionEnum.TASK_READ);
if (!isTaskMember && !hasPermission) throw new ForbiddenException(TaskMessage.USER_NOT_TASK_MEMBER);
const taskDetail = await this.taskRepository.getTaskDetail(taskId);
@@ -156,9 +160,13 @@ export class TaskService {
return { data: items, nextCursor, previousCursor, hasNextPage, hasPreviousPage, cursorPaginate: true };
}
async changePriority(srcTaskId: string, destTaskId: string): Promise<TMTask> {
async changePriority(srcTaskId: string,permissions: PermissionEnum[],userId: string, destTaskId: string): Promise<TMTask> {
const srcTask = await this.findOneOrFail(srcTaskId);
const desTask = await this.findOneOrFail(destTaskId);
const isTaskMember = srcTask.users.some((user) => user.id === userId);
const hasPermission = permissions.includes(PermissionEnum.TASK_UPDATE);
if (!isTaskMember && !hasPermission) throw new ForbiddenException(TaskMessage.USER_NOT_TASK_MEMBER);
if (srcTask.taskPhaseId !== desTask.taskPhaseId)
throw new BadRequestException(TaskMessage.TASKS_NOT_IN_THE_SAME_TASK_PHASE);
@@ -66,7 +66,7 @@ export class WorkspaceService {
}
async findByUser(userId: string, permissions: PermissionEnum[]): Promise<TMWorkspace[]> {
if(permissions.includes(PermissionEnum.VIEW_ALL_WORKSPACES)) {
if(permissions.includes(PermissionEnum.WORKSPACE_READ)) {
return await this.workspaceRepository.find();
}
return await this.workspaceRepository.findByUser(userId);
+8 -8
View File
@@ -24,14 +24,14 @@ export class TicketsController {
//----------------- ticket categories -------------------
@ApiOperation({ summary: "Create ticket category => admin route" })
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_CREATE)
@Post("category")
createTicketCategory(@Body() createDto: CreateTicketCategoryDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.ticketsService.createTicketCategory(createDto, userIpAndHeaders);
}
@ApiOperation({ summary: "Update ticket category => admin route" })
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_UPDATE)
@Patch("category/:id")
updateCategory(
@Param() paramDto: ParamDto,
@@ -49,7 +49,7 @@ export class TicketsController {
@ApiOperation({ summary: "Get ticket categories list => admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_READ)
@Get("categories-list")
getCategoriesList(@Query() queryDto: SearchTicketCategoryDto) {
return this.ticketsService.getCategoriesList(queryDto);
@@ -58,7 +58,7 @@ export class TicketsController {
@ApiOperation({ summary: "toggle status of categories => admin route" })
@AdminRoute()
@HttpCode(HttpStatus.OK)
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_UPDATE)
@Post("category/toggle-status/:id")
toggleCategoryStatus(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.ticketsService.toggleCategoryStatus(paramDto, userIpAndHeaders);
@@ -74,7 +74,7 @@ export class TicketsController {
@ApiOperation({ summary: "create ticket by admin" })
@AdminRoute()
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_CREATE)
@Post("admin")
createTicketByAdmin(@Body() createDto: CreateTicketByAdminDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.ticketsService.createTicketByAdmin(createDto, userIpAndHeaders);
@@ -88,7 +88,7 @@ export class TicketsController {
@ApiOperation({ summary: "Get all tickets ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_READ)
@Get("admin")
getAllTickets(@Query() queryDto: SearchTicketQueryDto, @UserDec("id") adminId: string) {
return this.ticketsService.getTicketForAdmin(queryDto, adminId);
@@ -124,7 +124,7 @@ export class TicketsController {
@ApiOperation({ summary: "open ticket by admin" })
@AdminRoute()
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_UPDATE)
@Post(":id/open")
openTicketByAdmin(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.ticketsService.openTicketByAdmin(paramDto.id, userIpAndHeaders);
@@ -132,7 +132,7 @@ export class TicketsController {
@ApiOperation({ summary: "referer ticket ==> admin route" })
@AdminRoute()
@PermissionsDec(PermissionEnum.TICKETS)
@PermissionsDec(PermissionEnum.TICKETS_UPDATE)
@Post(":id/refer")
referTicket(@Param() paramDto: ParamDto, @Body() referDto: ReferTicketDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.ticketsService.referTicket(paramDto.id, referDto, userIpAndHeaders);
@@ -12,6 +12,6 @@ export class SearchAdminQueryDto extends PaginationDto {
@IsOptional()
@IsEnum(PermissionEnum)
@ApiPropertyOptional({ description: "permission", example: PermissionEnum.SERVICES })
@ApiPropertyOptional({ description: "permission", example: PermissionEnum.SERVICES_READ })
permission?: PermissionEnum;
}
@@ -0,0 +1,138 @@
import { PermissionEnum } from "../enums/permission.enum";
import { PermissionGroupEnum } from "../enums/permission-group.enum";
export type PermissionMeta = {
title: string;
group: PermissionGroupEnum;
};
export const permissionMeta: Record<PermissionEnum, PermissionMeta> = {
[PermissionEnum.SERVICES_CREATE]: { title: "ایجاد سرویس‌ها", group: PermissionGroupEnum.SERVICES },
[PermissionEnum.SERVICES_READ]: { title: "مشاهده سرویس‌ها", group: PermissionGroupEnum.SERVICES },
[PermissionEnum.SERVICES_UPDATE]: { title: "ویرایش سرویس‌ها", group: PermissionGroupEnum.SERVICES },
[PermissionEnum.SERVICES_DELETE]: { title: "حذف سرویس‌ها", group: PermissionGroupEnum.SERVICES },
[PermissionEnum.CUSTOMERS_CREATE]: { title: "ایجاد مشتریان", group: PermissionGroupEnum.CUSTOMERS },
[PermissionEnum.CUSTOMERS_READ]: { title: "مشاهده مشتریان", group: PermissionGroupEnum.CUSTOMERS },
[PermissionEnum.CUSTOMERS_UPDATE]: { title: "ویرایش مشتریان", group: PermissionGroupEnum.CUSTOMERS },
[PermissionEnum.CUSTOMERS_DELETE]: { title: "حذف مشتریان", group: PermissionGroupEnum.CUSTOMERS },
[PermissionEnum.AGENTS_CREATE]: { title: "ایجاد نمایندگان", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.AGENTS_READ]: { title: "مشاهده نمایندگان", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.AGENTS_UPDATE]: { title: "ویرایش نمایندگان", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.AGENTS_DELETE]: { title: "حذف نمایندگان", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.DEVELOPERS_CREATE]: { title: "ایجاد توسعه‌دهندگان", group: PermissionGroupEnum.USERS },
[PermissionEnum.DEVELOPERS_READ]: { title: "مشاهده توسعه‌دهندگان", group: PermissionGroupEnum.USERS },
[PermissionEnum.DEVELOPERS_UPDATE]: { title: "ویرایش توسعه‌دهندگان", group: PermissionGroupEnum.USERS },
[PermissionEnum.DEVELOPERS_DELETE]: { title: "حذف توسعه‌دهندگان", group: PermissionGroupEnum.USERS },
[PermissionEnum.INVOICES_CREATE]: { title: "ایجاد صورتحساب‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.INVOICES_READ]: { title: "مشاهده صورتحساب‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.INVOICES_UPDATE]: { title: "ویرایش صورتحساب‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.INVOICES_DELETE]: { title: "حذف صورتحساب‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.TRANSACTIONS_CREATE]: { title: "ایجاد تراکنش‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.TRANSACTIONS_READ]: { title: "مشاهده تراکنش‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.TRANSACTIONS_UPDATE]: { title: "ویرایش تراکنش‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.TRANSACTIONS_DELETE]: { title: "حذف تراکنش‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.DISCOUNTS_CREATE]: { title: "ایجاد تخفیف‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.DISCOUNTS_READ]: { title: "مشاهده تخفیف‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.DISCOUNTS_UPDATE]: { title: "ویرایش تخفیف‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.DISCOUNTS_DELETE]: { title: "حذف تخفیف‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.ADMINS_CREATE]: { title: "ایجاد ادمین‌ها", group: PermissionGroupEnum.USERS },
[PermissionEnum.ADMINS_READ]: { title: "مشاهده ادمین‌ها", group: PermissionGroupEnum.USERS },
[PermissionEnum.ADMINS_UPDATE]: { title: "ویرایش ادمین‌ها", group: PermissionGroupEnum.USERS },
[PermissionEnum.ADMINS_DELETE]: { title: "حذف ادمین‌ها", group: PermissionGroupEnum.USERS },
[PermissionEnum.TICKETS_CREATE]: { title: "ایجاد تیکت‌ها", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.TICKETS_READ]: { title: "مشاهده تیکت‌ها", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.TICKETS_UPDATE]: { title: "ویرایش تیکت‌ها", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.TICKETS_DELETE]: { title: "حذف تیکت‌ها", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.CRITICISMS_CREATE]: { title: "ایجاد انتقادات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CRITICISMS_READ]: { title: "مشاهده انتقادات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CRITICISMS_UPDATE]: { title: "ویرایش انتقادات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CRITICISMS_DELETE]: { title: "حذف انتقادات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CONTACTS_US_CREATE]: { title: "ایجاد تماس با ما", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CONTACTS_US_READ]: { title: "مشاهده تماس با ما", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CONTACTS_US_UPDATE]: { title: "ویرایش تماس با ما", group: PermissionGroupEnum.OTHER },
[PermissionEnum.CONTACTS_US_DELETE]: { title: "حذف تماس با ما", group: PermissionGroupEnum.OTHER },
[PermissionEnum.ADVERTISEMENTS_CREATE]: { title: "ایجاد تبلیغات", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ADVERTISEMENTS_READ]: { title: "مشاهده تبلیغات", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ADVERTISEMENTS_UPDATE]: { title: "ویرایش تبلیغات", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ADVERTISEMENTS_DELETE]: { title: "حذف تبلیغات", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ANNOUNCEMENTS_CREATE]: { title: "ایجاد اطلاعیه‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ANNOUNCEMENTS_READ]: { title: "مشاهده اطلاعیه‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ANNOUNCEMENTS_UPDATE]: { title: "ویرایش اطلاعیه‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.ANNOUNCEMENTS_DELETE]: { title: "حذف اطلاعیه‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.BLOGS_CREATE]: { title: "ایجاد بلاگ‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.BLOGS_READ]: { title: "مشاهده بلاگ‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.BLOGS_UPDATE]: { title: "ویرایش بلاگ‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.BLOGS_DELETE]: { title: "حذف بلاگ‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.LEARNINGS_CREATE]: { title: "ایجاد آموزش‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.LEARNINGS_READ]: { title: "مشاهده آموزش‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.LEARNINGS_UPDATE]: { title: "ویرایش آموزش‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.LEARNINGS_DELETE]: { title: "حذف آموزش‌ها", group: PermissionGroupEnum.CONTENT },
[PermissionEnum.SETTINGS_CREATE]: { title: "ایجاد تنظیمات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.SETTINGS_READ]: { title: "مشاهده تنظیمات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.SETTINGS_UPDATE]: { title: "ویرایش تنظیمات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.SETTINGS_DELETE]: { title: "حذف تنظیمات", group: PermissionGroupEnum.OTHER },
[PermissionEnum.BANK_ACCOUNTS_CREATE]: { title: "ایجاد حساب‌های بانکی", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.BANK_ACCOUNTS_READ]: { title: "مشاهده حساب‌های بانکی", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.BANK_ACCOUNTS_UPDATE]: { title: "ویرایش حساب‌های بانکی", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.BANK_ACCOUNTS_DELETE]: { title: "حذف حساب‌های بانکی", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.PAYMENTS_CREATE]: { title: "ایجاد پرداخت‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.PAYMENTS_READ]: { title: "مشاهده پرداخت‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.PAYMENTS_UPDATE]: { title: "ویرایش پرداخت‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.PAYMENTS_DELETE]: { title: "حذف پرداخت‌ها", group: PermissionGroupEnum.FINANCIAL },
[PermissionEnum.SUPPORT_PLAN_CREATE]: { title: "ایجاد پلن پشتیبانی", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.SUPPORT_PLAN_READ]: { title: "مشاهده پلن پشتیبانی", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.SUPPORT_PLAN_UPDATE]: { title: "ویرایش پلن پشتیبانی", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.SUPPORT_PLAN_DELETE]: { title: "حذف پلن پشتیبانی", group: PermissionGroupEnum.SUPPORT },
[PermissionEnum.RESELLER_CREATE]: { title: "ایجاد نمایندگی فروش", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.RESELLER_READ]: { title: "مشاهده نمایندگی فروش", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.RESELLER_UPDATE]: { title: "ویرایش نمایندگی فروش", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.RESELLER_DELETE]: { title: "حذف نمایندگی فروش", group: PermissionGroupEnum.REPRESENTATIVES },
[PermissionEnum.WORKSPACE_CREATE]: { title: "ایجاد فضای کار", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.WORKSPACE_READ]: { title: "مشاهده فضای کار", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.WORKSPACE_UPDATE]: { title: "ویرایش فضای کار", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.WORKSPACE_DELETE]: { title: "حذف فضای کار", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.PROJECT_CREATE]: { title: "ایجاد پروژه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.PROJECT_READ]: { title: "مشاهده پروژه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.PROJECT_UPDATE]: { title: "ویرایش پروژه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.PROJECT_DELETE]: { title: "حذف پروژه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_CREATE]: { title: "ایجاد وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_READ]: { title: "مشاهده وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_UPDATE]: { title: "ویرایش وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_DELETE]: { title: "حذف وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_PHASE_CREATE]: { title: "ایجاد فاز وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_PHASE_READ]: { title: "مشاهده فاز وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_PHASE_UPDATE]: { title: "ویرایش فاز وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.TASK_PHASE_DELETE]: { title: "حذف فاز وظیفه", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.LOGS]: { title: "لاگ‌ها", group: PermissionGroupEnum.OTHER },
[PermissionEnum.MANAGE_SSO_CLIENTS]: { title: "مدیریت کلاینت‌های SSO", group: PermissionGroupEnum.OTHER },
[PermissionEnum.DMENU]: { title: "دی‌منو", group: PermissionGroupEnum.PRODUCTS },
[PermissionEnum.DKALA]: { title: "دی‌کالا", group: PermissionGroupEnum.PRODUCTS },
[PermissionEnum.DPAGE]: { title: "دی‌پیج", group: PermissionGroupEnum.PRODUCTS },
[PermissionEnum.DMAIL]: { title: "دی‌میل", group: PermissionGroupEnum.PRODUCTS },
[PermissionEnum.VIEW_ALL_WORKSPACES]: { title: "مشاهده همه فضاهای کار", group: PermissionGroupEnum.TASK_MANAGER },
[PermissionEnum.VIEW_ALL_PROJECTS]: { title: "مشاهده همه پروژه‌ها", group: PermissionGroupEnum.TASK_MANAGER },
};
@@ -3,6 +3,7 @@ import { Column, Entity, ManyToMany } from "typeorm";
import { Role } from "./role.entity";
import { BaseEntity } from "../../../common/entities/base.entity";
import { PermissionEnum } from "../enums/permission.enum";
import { PermissionGroupEnum } from "../enums/permission-group.enum";
@Entity()
export class Permission extends BaseEntity {
@@ -12,6 +13,9 @@ export class Permission extends BaseEntity {
@Column({ type: "varchar", length: 150, nullable: false })
title: string;
@Column({ type: "enum", enum: PermissionGroupEnum, nullable: false })
group: PermissionGroupEnum;
@ManyToMany(() => Role, (role) => role.permissions)
roles: Role[];
}
@@ -0,0 +1,12 @@
export enum PermissionGroupEnum {
SERVICES = "services",
CUSTOMERS = "customers",
USERS = "users",
FINANCIAL = "financial",
CONTENT = "content",
SUPPORT = "support",
OTHER = "other",
PRODUCTS = "products",
REPRESENTATIVES = "representatives",
TASK_MANAGER = "task_manager",
}
+148 -27
View File
@@ -1,34 +1,155 @@
export enum PermissionEnum {
SERVICES = "services",
CUSTOMERS = "customers",
AGENTS = "agents",
DEVELOPERS = "developers",
INVOICES = "invoices",
TRANSACTIONS = "transactions",
DISCOUNTS = "discounts",
ADMINS = "admins",
TICKETS = "tickets",
CRITICISMS = "criticisms",
CONTACTS_US = "contacts_us",
ADVERTISEMENTS = "advertisements",
ANNOUNCEMENTS = "announcements",
BLOGS = "blogs",
LEARNINGS = "learnings",
// services
SERVICES_CREATE = "services_create",
SERVICES_READ = "services_read",
SERVICES_UPDATE = "services_update",
SERVICES_DELETE = "services_delete",
// customers
CUSTOMERS_CREATE = "customers_create",
CUSTOMERS_READ = "customers_read",
CUSTOMERS_UPDATE = "customers_update",
CUSTOMERS_DELETE = "customers_delete",
// agents
AGENTS_CREATE = "agents_create",
AGENTS_READ = "agents_read",
AGENTS_UPDATE = "agents_update",
AGENTS_DELETE = "agents_delete",
// developers
DEVELOPERS_CREATE = "developers_create",
DEVELOPERS_READ = "developers_read",
DEVELOPERS_UPDATE = "developers_update",
DEVELOPERS_DELETE = "developers_delete",
// invoices
INVOICES_CREATE = "invoices_create",
INVOICES_READ = "invoices_read",
INVOICES_UPDATE = "invoices_update",
INVOICES_DELETE = "invoices_delete",
// transactions
TRANSACTIONS_CREATE = "transactions_create",
TRANSACTIONS_READ = "transactions_read",
TRANSACTIONS_UPDATE = "transactions_update",
TRANSACTIONS_DELETE = "transactions_delete",
// discounts
DISCOUNTS_CREATE = "discounts_create",
DISCOUNTS_READ = "discounts_read",
DISCOUNTS_UPDATE = "discounts_update",
DISCOUNTS_DELETE = "discounts_delete",
// admins
ADMINS_CREATE = "admins_create",
ADMINS_READ = "admins_read",
ADMINS_UPDATE = "admins_update",
ADMINS_DELETE = "admins_delete",
// tickets
TICKETS_CREATE = "tickets_create",
TICKETS_READ = "tickets_read",
TICKETS_UPDATE = "tickets_update",
TICKETS_DELETE = "tickets_delete",
// criticisms
CRITICISMS_CREATE = "criticisms_create",
CRITICISMS_READ = "criticisms_read",
CRITICISMS_UPDATE = "criticisms_update",
CRITICISMS_DELETE = "criticisms_delete",
// contacts_us
CONTACTS_US_CREATE = "contacts_us_create",
CONTACTS_US_READ = "contacts_us_read",
CONTACTS_US_UPDATE = "contacts_us_update",
CONTACTS_US_DELETE = "contacts_us_delete",
// advertisements
ADVERTISEMENTS_CREATE = "advertisements_create",
ADVERTISEMENTS_READ = "advertisements_read",
ADVERTISEMENTS_UPDATE = "advertisements_update",
ADVERTISEMENTS_DELETE = "advertisements_delete",
// announcements
ANNOUNCEMENTS_CREATE = "announcements_create",
ANNOUNCEMENTS_READ = "announcements_read",
ANNOUNCEMENTS_UPDATE = "announcements_update",
ANNOUNCEMENTS_DELETE = "announcements_delete",
// blogs
BLOGS_CREATE = "blogs_create",
BLOGS_READ = "blogs_read",
BLOGS_UPDATE = "blogs_update",
BLOGS_DELETE = "blogs_delete",
// learnings
LEARNINGS_CREATE = "learnings_create",
LEARNINGS_READ = "learnings_read",
LEARNINGS_UPDATE = "learnings_update",
LEARNINGS_DELETE = "learnings_delete",
// settings
SETTINGS_CREATE = "settings_create",
SETTINGS_READ = "settings_read",
SETTINGS_UPDATE = "settings_update",
SETTINGS_DELETE = "settings_delete",
// bank_accounts
BANK_ACCOUNTS_CREATE = "bank_accounts_create",
BANK_ACCOUNTS_READ = "bank_accounts_read",
BANK_ACCOUNTS_UPDATE = "bank_accounts_update",
BANK_ACCOUNTS_DELETE = "bank_accounts_delete",
// payments
PAYMENTS_CREATE = "payments_create",
PAYMENTS_READ = "payments_read",
PAYMENTS_UPDATE = "payments_update",
PAYMENTS_DELETE = "payments_delete",
// support_plan
SUPPORT_PLAN_CREATE = "support_plan_create",
SUPPORT_PLAN_READ = "support_plan_read",
SUPPORT_PLAN_UPDATE = "support_plan_update",
SUPPORT_PLAN_DELETE = "support_plan_delete",
// reseller
RESELLER_CREATE = "reseller_create",
RESELLER_READ = "reseller_read",
RESELLER_UPDATE = "reseller_update",
RESELLER_DELETE = "reseller_delete",
// workspace
WORKSPACE_CREATE = "workspace_create",
WORKSPACE_READ = "workspace_read",
WORKSPACE_UPDATE = "workspace_update",
WORKSPACE_DELETE = "workspace_delete",
// project
PROJECT_CREATE = "project_create",
PROJECT_READ = "project_read",
PROJECT_UPDATE = "project_update",
PROJECT_DELETE = "project_delete",
// task
TASK_CREATE = "task_create",
TASK_READ = "task_read",
TASK_UPDATE = "task_update",
TASK_DELETE = "task_delete",
// task_phase
TASK_PHASE_CREATE = "task_phase_create",
TASK_PHASE_READ = "task_phase_read",
TASK_PHASE_UPDATE = "task_phase_update",
TASK_PHASE_DELETE = "task_phase_delete",
// single permissions (no CRUD split)
LOGS = "logs",
SETTINGS = "settings",
BANK_ACCOUNTS = "bank_accounts",
PAYMENTS = "payments",
MANAGE_SSO_CLIENTS = "manage_sso_clients",
SUPPORT_PLAN = "support_plan",
DMENU = "dmenu",
DKALA = "dkala",
DPAGE = "dpage",
DMAIL = 'dmail',
RESELLER="reseller",
WORKSPACE="workspace", // create, update, remove, read-one(for update purposes)
VIEW_ALL_WORKSPACES="view_all_workspaces",
PROJECT="project", // create, update, remove
VIEW_ALL_PROJECTS="view_all_projects",
TASK="task", // read, create, update, remove
TASK_PHASE="task_phase",
DMAIL = "dmail",
// VIEW_ALL_WORKSPACES = "view_all_workspaces",
// VIEW_ALL_PROJECTS = "view_all_projects",
}
@@ -288,7 +288,10 @@ export class AdminsService {
/************************************************************ */
async getPermissions() {
const permissions = await this.permissionsRepository.find({ select: { id: true, name: true, title: true } });
const permissions = await this.permissionsRepository.find({
select: { id: true, name: true, title: true, group: true },
order: { group: "ASC", name: "ASC" },
});
return {
permissions,
};
@@ -188,7 +188,7 @@ export class UserRepository extends Repository<User> {
.leftJoinAndSelect("role.permissions", "permissions")
.andWhere("user.deletedAt IS NULL");
// .where("permissions.name IN (:...adminPermissions)", {
// adminPermissions: [PermissionEnum.ADMINS],
// adminPermissions: [PermissionEnum.ADMINS_READ],
// });
// .addSelect(["permissions.id", "permissions.name"]);
+18 -16
View File
@@ -113,21 +113,21 @@ export class UsersController {
}
@ApiOperation({ summary: "Create user group ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_CREATE, PermissionEnum.CUSTOMERS_CREATE)
@Post("user-group")
createUserGroup(@Body() createDto: CreateUserGroupDto) {
return this.usersService.createUserGroup(createDto);
}
@ApiOperation({ summary: "get all user group ==> admin route" })
@PermissionsDec(PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.CUSTOMERS_READ)
@Get("user-group")
UserGroups() {
return this.usersService.getUserGroups();
}
@ApiOperation({ summary: "get all users ==> admin route" })
@PermissionsDec(PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.CUSTOMERS_READ)
@Get()
getUsers() {
return this.usersService.findAllUsers();
@@ -136,12 +136,14 @@ export class UsersController {
@ApiOperation({ summary: "Create customer" })
@HttpCode(HttpStatus.CREATED)
@PermissionsDec(PermissionEnum.CUSTOMERS_CREATE)
@Post("customers")
createCustomer(@Body() createDto: CreateCustomerDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.customersService.createCustomer(createDto, userIpAndHeaders);
}
@ApiOperation({ summary: "Update customer" })
@PermissionsDec(PermissionEnum.CUSTOMERS_UPDATE)
@Patch("customers/:id")
updateCustomer(
@Param() paramDto: ParamDto,
@@ -152,14 +154,14 @@ export class UsersController {
}
@ApiOperation({ summary: "get customers ==> admin route" })
@PermissionsDec(PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.CUSTOMERS_READ)
@Get("customers")
getCustomers(@Query() queryDto: SearchCustomersDto) {
return this.customersService.getCustomers(queryDto);
}
@ApiOperation({ summary: "get customers by id ==> admin route" })
@PermissionsDec(PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.CUSTOMERS_READ)
@Get("customers/:id")
getCustomerById(@Param() paramDto: ParamDto) {
return this.customersService.getCustomerById(paramDto.id);
@@ -169,35 +171,35 @@ export class UsersController {
@ApiOperation({ summary: "get all admins ==> admin route" })
@AdminRoute()
// @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
// @PermissionsDec(PermissionEnum.ADMINS_READ, PermissionEnum.CUSTOMERS_READ)
@Get("admins")
getAdmins(@Query() queryDto: SearchAdminQueryDto) {
return this.adminsService.getAdmins(queryDto);
}
@ApiOperation({ summary: "get admin by id ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_READ, PermissionEnum.CUSTOMERS_READ)
@Get("admins/:id")
getAdminById(@Param() paramDto: ParamDto) {
return this.adminsService.getAdminById(paramDto.id);
}
@ApiOperation({ summary: "update admin ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_UPDATE, PermissionEnum.CUSTOMERS_UPDATE)
@Patch("admins/:id")
updateAdmin(@Param() paramDto: ParamDto, @Body() updateDto: UpdateAdminDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.adminsService.updateAdmin(paramDto.id, updateDto, userIpAndHeaders);
}
@ApiOperation({ summary: "delete admin ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_DELETE, PermissionEnum.CUSTOMERS_DELETE)
@Delete("admins/:id")
deleteAdmin(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.adminsService.deleteAdmin(paramDto.id, userIpAndHeaders);
}
@ApiOperation({ summary: "create admin ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_CREATE, PermissionEnum.CUSTOMERS_CREATE)
@Post("admins")
createAdmin(@Body() createDto: CreateAdminDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) {
return this.adminsService.createAdmin(createDto, userIpAndHeaders);
@@ -210,42 +212,42 @@ export class UsersController {
}
@ApiOperation({ summary: "get all permissions ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_READ, PermissionEnum.CUSTOMERS_READ)
@Get("permissions")
getPermissions() {
return this.adminsService.getPermissions();
}
@ApiOperation({ summary: "get all roles ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_READ, PermissionEnum.CUSTOMERS_READ)
@Get("roles")
getRoles(@Query() queryDto: SearchRolesQueryDto) {
return this.adminsService.getRoles(queryDto);
}
@ApiOperation({ summary: "get role by id ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_READ, PermissionEnum.CUSTOMERS_READ)
@Get("roles/:id")
getRoleById(@Param() paramDto: ParamDto) {
return this.adminsService.getRoleById(paramDto.id);
}
@ApiOperation({ summary: "create role ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_CREATE, PermissionEnum.CUSTOMERS_CREATE)
@Post("roles")
createRole(@Body() createDto: CreateRoleDto) {
return this.adminsService.createRole(createDto);
}
@ApiOperation({ summary: "update role ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_UPDATE, PermissionEnum.CUSTOMERS_UPDATE)
@Patch("roles/:id")
updateRole(@Param() paramDto: ParamDto, @Body() updateDto: UpdateRoleDto) {
return this.adminsService.updateRole(paramDto.id, updateDto);
}
@ApiOperation({ summary: "delete role ==> admin route" })
@PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)
@PermissionsDec(PermissionEnum.ADMINS_DELETE, PermissionEnum.CUSTOMERS_DELETE)
@Delete("roles/:id")
deleteRole(@Param() paramDto: ParamDto) {
return this.adminsService.deleteRole(paramDto.id);