rosa-build/app/policies/repository_policy.rb

70 lines
1.6 KiB
Ruby

class RepositoryPolicy < ApplicationPolicy
def show?
PlatformPolicy.new(user, record.platform).show?
end
alias_method :projects?, :show?
alias_method :projects_list?, :show?
alias_method :read?, :show?
def reader?
local_reader?(record.platform)
end
def write?
local_writer?(record.platform)
end
def update?
local_admin?(record.platform)
end
alias_method :manage_members?, :update?
alias_method :regenerate_metadata?, :update?
alias_method :signatures?, :update?
def create?
return false if record.platform.personal? && name == 'main'
local_admin?(record.platform)
end
alias_method :destroy?, :create?
def packages?
record.platform.main? && local_admin?(record.platform)
end
alias_method :remove_member?, :packages?
alias_method :remove_members?, :packages?
alias_method :add_member?, :packages?
alias_method :sync_lock_file?, :packages?
def add_project?
local_admin?(record.platform) || repository_user_ids.include?(user.id)
end
alias_method :remove_project?, :add_project?
def destroy?
owner?(record.platform)
end
alias_method :settings?, :destroy?
def key_pair?
user.system?
end
def add_repo_lock_file?
user.system? || ( record.platform.main? && local_admin?(record.platform) )
end
alias_method :remove_repo_lock_file?, :add_repo_lock_file?
private
# Public: Get user ids of repository.
#
# Returns the Set of user ids.
def repository_user_ids
Rails.cache.fetch(['RepositoryPolicy#repository_user_ids', record]) do
Set.new record.member_ids
end
end
end