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

View File

@@ -12,7 +12,15 @@ import type {
export const membersApi = { 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) => list: (workspaceId: string, params?: PaginationParams) =>
api.get<PaginatedResponse<WorkspaceMember>>( api.get<PaginatedResponse<WorkspaceMember>>(
@@ -20,7 +28,7 @@ export const membersApi = {
{ params } { params }
), ),
/** /**
* Update member permissions * Update member permissions
* @param workspaceId - workspace id * @param workspaceId - workspace id
* @param workspaceUserId - workspace_user.id (not user.id!) * @param workspaceUserId - workspace_user.id (not user.id!)