- Add Tenants module to Identity Gateway - Update Dashboard Auth context and components - Refactor token service and user/role controllers - Add Quadlet container definitions for dev environment
94 lines
3 KiB
TypeScript
94 lines
3 KiB
TypeScript
import { FastifyInstance } from "fastify";
|
|
import { RoleService } from "./role.service";
|
|
import { authGuard } from "../../core/auth.guard";
|
|
import { TokenService } from "../../core/token.service";
|
|
|
|
export const registerRoleRoutes = (
|
|
app: FastifyInstance,
|
|
roleService: RoleService,
|
|
tokenService: TokenService
|
|
) => {
|
|
// List all roles
|
|
app.get(
|
|
"/roles",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async () => {
|
|
return roleService.listRoles();
|
|
}
|
|
);
|
|
|
|
// Get role by ID
|
|
app.get(
|
|
"/roles/:id",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request) => {
|
|
const { id } = request.params as { id: string };
|
|
return roleService.findById(id);
|
|
}
|
|
);
|
|
|
|
// Create role
|
|
app.post(
|
|
"/roles",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request, reply) => {
|
|
const { name, description } = request.body as { name: string; description?: string };
|
|
if (!name) {
|
|
reply.code(400).send({ message: "Name is required" });
|
|
return;
|
|
}
|
|
const role = await roleService.createRole(name, description);
|
|
reply.code(201).send(role);
|
|
}
|
|
);
|
|
|
|
// Update role
|
|
app.put(
|
|
"/roles/:id",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request) => {
|
|
const { id } = request.params as { id: string };
|
|
const { name, description } = request.body as { name: string; description?: string };
|
|
return roleService.updateRole(id, name, description);
|
|
}
|
|
);
|
|
|
|
// Delete role
|
|
app.delete(
|
|
"/roles/:id",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request, reply) => {
|
|
const { id } = request.params as { id: string };
|
|
await roleService.deleteRole(id);
|
|
reply.code(204).send();
|
|
}
|
|
);
|
|
|
|
// Assign role to user
|
|
app.post(
|
|
"/roles/:roleId/users/:userId",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request, reply) => {
|
|
const { roleId, userId } = request.params as { roleId: string; userId: string };
|
|
const { tenantId } = request.body as { tenantId: string };
|
|
if (!tenantId) {
|
|
reply.code(400).send({ message: "tenantId is required" });
|
|
return;
|
|
}
|
|
await roleService.assignRoleToUser(userId, tenantId, roleId);
|
|
reply.code(201).send({ success: true });
|
|
}
|
|
);
|
|
|
|
// Remove role from user
|
|
app.delete(
|
|
"/roles/:roleId/users/:userId",
|
|
{ preHandler: authGuard(tokenService) },
|
|
async (request, reply) => {
|
|
const { roleId, userId } = request.params as { roleId: string; userId: string };
|
|
const { tenantId } = request.body as { tenantId: string };
|
|
await roleService.removeRoleFromUser(userId, tenantId, roleId);
|
|
reply.code(204).send();
|
|
}
|
|
);
|
|
};
|