Fixed Role Loading
This commit is contained in:
@@ -37,51 +37,51 @@ export default fp(async (server: FastifyInstance) => {
|
|||||||
tenant_id: number;
|
tenant_id: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log("payload", payload);
|
|
||||||
|
|
||||||
if (!payload?.user_id) {
|
if (!payload?.user_id) {
|
||||||
return reply.code(401).send({ error: "Invalid token" });
|
return reply.code(401).send({ error: "Invalid token" });
|
||||||
}
|
}
|
||||||
|
|
||||||
req.user = payload;
|
req.user = payload;
|
||||||
|
|
||||||
// 3️⃣ Rolle des Nutzers im Tenant laden
|
if(req.user.tenant_id) {
|
||||||
const { data: roleData, error: roleError } = await server.supabase
|
// 3️⃣ Rolle des Nutzers im Tenant laden
|
||||||
.from("auth_user_roles")
|
const { data: roleData, error: roleError } = await server.supabase
|
||||||
.select("role_id")
|
.from("auth_user_roles")
|
||||||
.eq("user_id", payload.user_id)
|
.select("role_id")
|
||||||
.eq("tenant_id", payload.tenant_id)
|
.eq("user_id", payload.user_id)
|
||||||
.maybeSingle();
|
.eq("tenant_id", payload.tenant_id)
|
||||||
|
.maybeSingle();
|
||||||
|
|
||||||
if (roleError) {
|
if (roleError) {
|
||||||
console.log("Error fetching user role", roleError);
|
console.log("Error fetching user role", roleError);
|
||||||
return reply.code(500).send({ error: "Failed to load user role" });
|
return reply.code(500).send({ error: "Failed to load user role" });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!roleData) {
|
||||||
|
return reply.code(403).send({ error: "No role assigned for this tenant" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const roleId = roleData.role_id;
|
||||||
|
|
||||||
|
// 4️⃣ Berechtigungen der Rolle laden
|
||||||
|
const { data: permissions, error: permsError } = await server.supabase
|
||||||
|
.from("auth_role_permissions")
|
||||||
|
.select("permission")
|
||||||
|
.eq("role_id", roleId);
|
||||||
|
|
||||||
|
if (permsError) {
|
||||||
|
console.log("Failed to load permissions", permsError);
|
||||||
|
return reply.code(500).send({ error: "Permission lookup failed" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const perms = permissions?.map((p) => p.permission) ?? [];
|
||||||
|
|
||||||
|
// 5️⃣ An Request hängen
|
||||||
|
req.role = roleId;
|
||||||
|
req.permissions = perms;
|
||||||
|
req.hasPermission = (perm: string) => perms.includes(perm);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!roleData) {
|
|
||||||
return reply.code(403).send({ error: "No role assigned for this tenant" });
|
|
||||||
}
|
|
||||||
|
|
||||||
const roleId = roleData.role_id;
|
|
||||||
|
|
||||||
// 4️⃣ Berechtigungen der Rolle laden
|
|
||||||
const { data: permissions, error: permsError } = await server.supabase
|
|
||||||
.from("auth_role_permissions")
|
|
||||||
.select("permission")
|
|
||||||
.eq("role_id", roleId);
|
|
||||||
|
|
||||||
if (permsError) {
|
|
||||||
console.log("Failed to load permissions", permsError);
|
|
||||||
return reply.code(500).send({ error: "Permission lookup failed" });
|
|
||||||
}
|
|
||||||
|
|
||||||
const perms = permissions?.map((p) => p.permission) ?? [];
|
|
||||||
|
|
||||||
// 5️⃣ An Request hängen
|
|
||||||
req.role = roleId;
|
|
||||||
req.permissions = perms;
|
|
||||||
req.hasPermission = (perm: string) => perms.includes(perm);
|
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return reply.code(401).send({ error: "Invalid or expired token" });
|
return reply.code(401).send({ error: "Invalid or expired token" });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user