# frozen_string_literal: true Canaid::Permissions.register_for(StorageLocation) do can :read_storage_location do |user, storage_location| root_storage_location = storage_location.root_storage_location next true if root_storage_location.shared_with?(user.current_team) user.current_team == root_storage_location.team && root_storage_location.team.permission_granted?( user, if root_storage_location.container? TeamPermissions::STORAGE_LOCATION_CONTAINERS_READ else TeamPermissions::STORAGE_LOCATIONS_READ end ) end can :manage_storage_location do |user, storage_location| root_storage_location = storage_location.root_storage_location next false unless user.current_team.permission_granted?( user, if root_storage_location.container? TeamPermissions::STORAGE_LOCATION_CONTAINERS_MANAGE else TeamPermissions::STORAGE_LOCATIONS_MANAGE end ) next true if user.current_team == root_storage_location.team root_storage_location.shared_with_write?(user.current_team) end can :manage_storage_location_repository_rows do |user, storage_location| can_read_storage_location?(user, storage_location) && user.current_team.permission_granted?(user, TeamPermissions::STORAGE_LOCATION_CONTAINERS_MANAGE) end can :share_storage_location do |user, storage_location| user.current_team == storage_location.team && storage_location.root? && can_manage_storage_location?(user, storage_location) end end