travis-api/lib/travis/api/v3/access_control/user.rb
2015-04-29 14:28:33 +02:00

46 lines
1.1 KiB
Ruby

require 'travis/api/v3/access_control/generic'
module Travis::API::V3
class AccessControl::User < AccessControl::Generic
attr_reader :user, :access_permissions
def initialize(user)
user = Models::User.find(user.id) if user.is_a? ::User
@user = user
@access_permissions = user.permissions.where(user_id: user.id)
super()
end
def logged_in?
true
end
def admin_for(repository)
permission?(:admin, repository) ? user : super
end
def visible_repositories(list)
list.where('repositories.private = false OR repositories.id IN (?)'.freeze, access_permissions.map(&:repository_id))
end
protected
def organization_writable?(organization)
organization.members.include? user
end
def repository_writable?(repository)
permission?(:push, repository)
end
def private_repository_visible?(repository)
permission?(:pull, repository)
end
def permission?(type, id)
id = id.id if id.is_a? ::Repository
access_permissions.where(type => true, :repository_id => id).any?
end
end
end