Skip to content

Commit 36278f2

Browse files
committed
Group Memberships WIP
1 parent 6629ec5 commit 36278f2

File tree

13 files changed

+2599
-25
lines changed

13 files changed

+2599
-25
lines changed

src/lib/config/navigation.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,16 @@ function buildRbacItems(): NavigationItem[] {
173173
label: "Create Group",
174174
iconComponent: Plus,
175175
},
176+
{
177+
href: "/rbac/memberships",
178+
label: "Memberships",
179+
iconComponent: Users,
180+
},
181+
{
182+
href: "/rbac/memberships/create",
183+
label: "Create Membership",
184+
iconComponent: Plus,
185+
},
176186
{
177187
href: "/rbac/entitlement-requests",
178188
label: "Entitlement Requests",

src/routes/(protected)/rbac/groups/[group_id]/+page.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@
7575
<Edit size={16} />
7676
Edit
7777
</button>
78-
<button class="btn-danger" disabled>
78+
<a href="/rbac/groups/{group.group_id}/delete" class="btn-danger">
7979
<Trash2 size={16} />
8080
Delete
81-
</button>
81+
</a>
8282
</div>
8383
</div>
8484
</div>
@@ -98,7 +98,7 @@
9898
<Building2 size={16} />
9999
Bank ID
100100
</div>
101-
<div class="info-value">{group.bank_id}</div>
101+
<div class="info-value">{group.bank_id || "N/A"}</div>
102102
</div>
103103
<div class="info-item">
104104
<div class="info-label">Status</div>
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import type { PageServerLoad } from "./$types";
2+
import { error } from "@sveltejs/kit";
3+
import { createLogger } from "$lib/utils/logger";
4+
import { obp_requests } from "$lib/obp/requests";
5+
import { SessionOAuthHelper } from "$lib/oauth/sessionHelper";
6+
7+
const logger = createLogger("DeleteGroupPageServer");
8+
9+
interface Group {
10+
group_id: string;
11+
bank_id: string;
12+
group_name: string;
13+
group_description: string;
14+
is_enabled: boolean;
15+
list_of_roles?: string[];
16+
}
17+
18+
export const load: PageServerLoad = async ({ locals, params }) => {
19+
const session = locals.session;
20+
21+
if (!session?.data?.user) {
22+
throw error(401, "Unauthorized");
23+
}
24+
25+
const { group_id } = params;
26+
27+
if (!group_id) {
28+
throw error(400, "Group ID is required");
29+
}
30+
31+
// Get the OAuth session data
32+
const sessionOAuth = SessionOAuthHelper.getSessionOAuth(session);
33+
const accessToken = sessionOAuth?.accessToken;
34+
35+
// Get user entitlements from session for role checking
36+
const userEntitlements = (session.data.user as any)?.entitlements?.list || [];
37+
38+
// Define required roles for deleting groups
39+
const requiredRoles = [
40+
{
41+
role: "CanDeleteGroupAtAllBanks",
42+
description: "Delete groups at all banks",
43+
action: "delete groups",
44+
},
45+
];
46+
47+
if (!accessToken) {
48+
logger.warn("No access token available for delete group page");
49+
return {
50+
group: null,
51+
userEntitlements,
52+
requiredRoles,
53+
hasApiAccess: false,
54+
error: "No API access token available",
55+
};
56+
}
57+
58+
try {
59+
logger.info("=== FETCHING GROUP FOR DELETION ===");
60+
logger.info(`Group ID: ${group_id}`);
61+
const endpoint = `/obp/v6.0.0/management/groups/${group_id}`;
62+
logger.info(`Request: ${endpoint}`);
63+
64+
const response: Group = await obp_requests.get(endpoint, accessToken);
65+
66+
logger.info(`Response: Group ${response.group_name}`);
67+
68+
return {
69+
group: response,
70+
userEntitlements,
71+
requiredRoles,
72+
hasApiAccess: true,
73+
};
74+
} catch (err) {
75+
logger.error("Error loading group:", err);
76+
77+
return {
78+
group: null,
79+
userEntitlements,
80+
requiredRoles,
81+
hasApiAccess: false,
82+
error: err instanceof Error ? err.message : "Failed to load group",
83+
};
84+
}
85+
};

0 commit comments

Comments
 (0)