feat: members permissions update

This commit is contained in:
ivannoskov
2026-02-11 18:46:16 +03:00
parent 77a41d6c2a
commit 9b509df12f
2 changed files with 23 additions and 28 deletions

View File

@@ -310,11 +310,8 @@ export const WorkspaceProvider: React.FC<WorkspaceProviderProps> = ({
);
setProjects(activeProjects);
// Load current user's permissions
const me = await authApi.me();
const membersResponse = await membersApi.list(workspaceId, { size: 100 });
// Find member by user.id (not by member record id)
const currentMember = membersResponse.items.find((m) => m.user.id === me.id);
// Load current user's permissions using the dedicated endpoint
const currentMember = await membersApi.getCurrentMember(workspaceId);
if (currentMember) {
// If member found but no permissions, they're likely the creator - grant admin
@@ -324,14 +321,9 @@ export const WorkspaceProvider: React.FC<WorkspaceProviderProps> = ({
setPermissions(currentMember.permissions);
}
} else {
// User not in members list - might be creator, check if only workspace
// Grant admin access by default for workspace creators
if (membersResponse.items.length === 0) {
setPermissions([{ key: "admin_full" }]);
} else {
// User is not a member of this workspace - no permissions
setPermissions([]);
}
}
// Restore selected projects from localStorage
const savedProjectIds = localStorage.getItem(
@@ -473,20 +465,15 @@ export const WorkspaceProvider: React.FC<WorkspaceProviderProps> = ({
// Load permissions for the target workspace
try {
const me = await authApi.me();
const membersResponse = await membersApi.list(workspaceId, { size: 100 });
const member = membersResponse.items.find((m) => m.user.id === me.id);
const currentMember = await membersApi.getCurrentMember(workspaceId);
if (!member) {
// Check if user is creator (members list is empty or this is first member)
if (membersResponse.items.length === 0) {
return true;
}
if (!currentMember) {
// User is not a member of this workspace
return false;
}
// Check if has admin_full permission
return member.permissions.some((p) => p.key === "admin_full");
return currentMember.permissions.some((p) => p.key === "admin_full");
} catch (err) {
console.error("Failed to check workspace permissions:", err);
return false;

View File

@@ -12,7 +12,15 @@ import type {
export const membersApi = {
/**
* Get list of workspace members
* Get current user's membership and permissions (any member can access)
*/
getCurrentMember: (workspaceId: string) =>
api.get<WorkspaceMember>(
`/workspaces/${workspaceId}/members/me`
),
/**
* Get list of workspace members (requires ADMIN_FULL)
*/
list: (workspaceId: string, params?: PaginationParams) =>
api.get<PaginatedResponse<WorkspaceMember>>(
@@ -20,7 +28,7 @@ export const membersApi = {
{ params }
),
/**
/**
* Update member permissions
* @param workspaceId - workspace id
* @param workspaceUserId - workspace_user.id (not user.id!)