54 lines
1.0 KiB
Ruby
54 lines
1.0 KiB
Ruby
class ContractTemplatePolicy < ApplicationPolicy
|
|
class Scope < Scope
|
|
def resolve
|
|
if user.account_manager?
|
|
scope.left_outer_joins(:project).where(projects: {account: user.account})
|
|
elsif user.manager?
|
|
scope.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
|
|
else
|
|
scope.public_template.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
|
|
end
|
|
end
|
|
end
|
|
|
|
def create?
|
|
user.manager? || user.account_manager?
|
|
end
|
|
|
|
def show?
|
|
true
|
|
end
|
|
|
|
def destroy?
|
|
create?
|
|
end
|
|
|
|
def edit?
|
|
record.editable? && create?
|
|
end
|
|
|
|
def update?
|
|
edit?
|
|
end
|
|
|
|
def duplicate?
|
|
create?
|
|
end
|
|
|
|
def import?
|
|
if user.account_manager?
|
|
record.project.account = user.account
|
|
elsif user.manager?
|
|
user.project_memberships.exists?(project: record.project)
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def has_signed_releases?
|
|
record.present? && !record.releases.size.zero?
|
|
end
|
|
end
|