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