mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-27 10:14:17 +08:00
46 lines
1.5 KiB
Ruby
46 lines
1.5 KiB
Ruby
# 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
|