diff --git a/src/Components/Map/Subcomponents/AddButton.tsx b/src/Components/Map/Subcomponents/AddButton.tsx index f5d6c7ff..84073aa6 100644 --- a/src/Components/Map/Subcomponents/AddButton.tsx +++ b/src/Components/Map/Subcomponents/AddButton.tsx @@ -8,11 +8,11 @@ export default function AddButton({ triggerAction }: { triggerAction: React.Disp const layers = useLayers(); const hasUserPermission = useHasUserPermission(); - const canAddItems = () => { + const canAddItems = () => { let canAdd = false; layers.map(layer => { if (layer.api?.createItem && hasUserPermission(layer.api.collectionName!, "create", undefined, layer) && layer.listed) canAdd = true; - }) + }) return canAdd; } diff --git a/src/Components/Map/hooks/usePermissions.tsx b/src/Components/Map/hooks/usePermissions.tsx index dc607260..ec98cb3f 100644 --- a/src/Components/Map/hooks/usePermissions.tsx +++ b/src/Components/Map/hooks/usePermissions.tsx @@ -96,28 +96,37 @@ function usePermissionsManager(initialPermissions: Permission[]): { ); }; - if (permissions.length === 0) return true; - else if (user && user.role === adminRole) return true; + // Bedingung für leere Berechtigungen nur, wenn NICHT item und create + if (permissions.length === 0 && !(collectionName === "item" && action === "create")) return true; + else if (user && user.role.id === adminRole) return true; else { return permissions.some(p => p.action === action && p.collection === collectionName && ( - (p.policy === user?.role && + // Neue Bedingung für "item" und "create" + (collectionName === "item" && action === "create" && layer?.public_edit_items === true) || ( - !item || evaluatePermissions(p.permissions) - )) || - (p.policy == null && - ( - (layer?.public_edit_items || item?.layer?.public_edit_items) && - (!item || evaluatePermissions(p.permissions)) - )) + (p.policy.name === user?.role.name && + ( + !item || evaluatePermissions(p.permissions) + )) || + (p.policy == null && + ( + (layer?.public_edit_items || item?.layer?.public_edit_items) && + (!item || evaluatePermissions(p.permissions)) + )) + ) ) ); } }, [permissions, user] ); + + + + return { permissions, setPermissionApi, setPermissionData, setAdminRole, hasUserPermission }; } diff --git a/src/types.ts b/src/types.ts index 4ac29c3a..7ec77af2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -130,7 +130,7 @@ export interface UserApi { export type UserItem = { id?: string; - role?: string; + role?: any; email?: string; password?: string; profile?: Profile; @@ -158,7 +158,7 @@ export type PermissionCondition = { export type Permission = { id?: string; - policy: string; + policy: any; collection: string; action: PermissionAction; permissions?: { // Optional, für spezifische Bedingungen wie `user_created`