/home/techb158/balavpn.abdallabala.com/src/app/api/organizations/[organizationId]/members
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/organizations/[organizationId]/members/route.js (1326B)
const { prisma } = require("../../../../../lib/prisma");
const { requireOrganizationActor } = require("../../../../../lib/request-context");
const { jsonResponse, errorResponse } = require("../../../../../lib/http");
const ROLE_HIERARCHY = {
viewer: 1,
risk_owner: 2,
governance_reviewer: 2,
legal_ethics_reviewer: 2,
integration_admin: 2,
project_manager: 3,
consultant: 3,
admin: 4,
owner: 5
};
export async function GET(request, { params }) {
try {
const { organizationId } = await params;
const { actor, membership } = await requireOrganizationActor(request, organizationId, "organization:view");
const actorLevel = ROLE_HIERARCHY[membership.role.code] || 0;
const members = await prisma.membership.findMany({
where: {
organizationId,
user: { platformRole: "NONE" }
},
include: {
user: { select: { id: true, email: true, displayName: true, platformRole: true } },
role: { select: { id: true, name: true, code: true } }
},
orderBy: { createdAt: "asc" }
});
const filtered = members.filter(m => {
const memberLevel = ROLE_HIERARCHY[m.role.code] || 0;
return memberLevel <= actorLevel;
});
return jsonResponse({ members: filtered });
} catch (error) {
return errorResponse(error);
}
}