20829: Check parent for editable status
[arvados.git] / src / store / resources / resources.ts
index 6f7acadae0f64cfac8ac2957e0dafb14eb1f3b76..3f71140497f7c5df566ef096fb75afc23afcbe0f 100644 (file)
@@ -9,26 +9,6 @@ import { GroupResource } from "models/group";
 
 export type ResourcesState = { [key: string]: Resource };
 
-const getResourceWritableBy = (state: ResourcesState, id: string, userUuid: string): string[] => {
-    if (!id) {
-        return [];
-    }
-
-    if (id === userUuid) {
-        return [userUuid];
-    }
-
-    const resource = (state[id] as ProjectResource);
-
-    if (!resource) {
-        return [];
-    }
-
-    const { writableBy } = resource;
-
-    return writableBy || getResourceWritableBy(state, resource.ownerUuid, userUuid);
-};
-
 export const getResourceWithEditableStatus = <T extends EditableResource & GroupResource>(id: string, userUuid?: string) =>
     (state: ResourcesState): T | undefined => {
         if (state[id] === undefined) { return; }
@@ -36,7 +16,12 @@ export const getResourceWithEditableStatus = <T extends EditableResource & Group
         const resource = JSON.parse(JSON.stringify(state[id] as T));
 
         if (resource) {
-            resource.isEditable = userUuid ? getResourceWritableBy(state, id, userUuid).indexOf(userUuid) > -1 : false;
+            resource.isEditable = resource.canWrite;
+
+            if (!resource.isEditable && state[resource.ownerUuid]) {
+                const resourceOwner = JSON.parse(JSON.stringify(state[resource.ownerUuid] as T));
+                resource.isEditable = resourceOwner.canWrite;
+            }
         }
 
         return resource;