feat: members permissions update
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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!)
|
||||||
|
|||||||
Reference in New Issue
Block a user