mirror of
https://github.com/SyncrowIOT/backend.git
synced 2026-10-25 21:57:55 +00:00
Add permission and role management features
This commit is contained in:
@@ -0,0 +1 @@
|
||||
export * from './permission.controller';
|
||||
@@ -0,0 +1,24 @@
|
||||
import { Controller, Get, Param } from '@nestjs/common';
|
||||
import { ApiTags, ApiOperation } from '@nestjs/swagger';
|
||||
import { ControllerRoute } from '@app/common/constants/controller-route';
|
||||
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
||||
import { PermissionService } from '../services';
|
||||
|
||||
@ApiTags('Permission Module')
|
||||
@Controller({
|
||||
version: EnableDisableStatusEnum.ENABLED,
|
||||
path: ControllerRoute.PERMISSION.ROUTE,
|
||||
})
|
||||
export class PermissionController {
|
||||
constructor(private readonly permissionService: PermissionService) {}
|
||||
|
||||
@Get(':roleUuid')
|
||||
@ApiOperation({
|
||||
summary: ControllerRoute.PERMISSION.ACTIONS.GET_PERMISSION_BY_ROLE_SUMMARY,
|
||||
description:
|
||||
ControllerRoute.PERMISSION.ACTIONS.GET_PERMISSION_BY_ROLE_DESCRIPTION,
|
||||
})
|
||||
async getPermissionsByRole(@Param('roleUuid') roleUuid: string) {
|
||||
return await this.permissionService.getPermissionsByRole(roleUuid);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { CommonModule } from '@app/common';
|
||||
import { PermissionController } from './controllers';
|
||||
import { PermissionService } from './services';
|
||||
import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
|
||||
|
||||
@Module({
|
||||
imports: [ConfigModule, CommonModule],
|
||||
controllers: [PermissionController],
|
||||
providers: [PermissionService, RoleTypeRepository],
|
||||
exports: [PermissionService],
|
||||
})
|
||||
export class PermissionModule {}
|
||||
@@ -0,0 +1 @@
|
||||
export * from './permission.service';
|
||||
@@ -0,0 +1,52 @@
|
||||
import { PermissionMapping } from '@app/common/constants/permissions-mapping';
|
||||
import { RolePermissions } from '@app/common/constants/role-permissions';
|
||||
import { RoleType } from '@app/common/constants/role.type.enum';
|
||||
import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
|
||||
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionService {
|
||||
constructor(private readonly roleTypeRepository: RoleTypeRepository) {}
|
||||
|
||||
async getPermissionsByRole(roleUuid: string) {
|
||||
try {
|
||||
const role = await this.roleTypeRepository.findOne({
|
||||
where: {
|
||||
uuid: roleUuid,
|
||||
},
|
||||
});
|
||||
|
||||
if (!role) {
|
||||
throw new HttpException('Role not found', HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
const permissions = this.mapPermissions(role.type.toString() as RoleType);
|
||||
return permissions;
|
||||
} catch (err) {
|
||||
throw new HttpException(
|
||||
err.message || 'Internal Server Error',
|
||||
err.status || HttpStatus.INTERNAL_SERVER_ERROR,
|
||||
);
|
||||
}
|
||||
}
|
||||
mapPermissions(role: RoleType): any[] {
|
||||
const rolePermissions = RolePermissions[role]; // Permissions for the role
|
||||
|
||||
const mappedPermissions = Object.entries(PermissionMapping).map(
|
||||
([title, subOptions]) => ({
|
||||
title,
|
||||
subOptions: Object.entries(subOptions).map(
|
||||
([subTitle, permissions]) => ({
|
||||
title: subTitle,
|
||||
subOptions: permissions.map((permission) => ({
|
||||
title: permission,
|
||||
isChecked: rolePermissions.includes(`${subTitle}_${permission}`), // Check if the role has the permission
|
||||
})),
|
||||
}),
|
||||
),
|
||||
}),
|
||||
);
|
||||
|
||||
return mappedPermissions;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user