demarches-normaliennes/app/policies/champ_policy.rb

26 lines
811 B
Ruby
Raw Normal View History

2019-06-27 16:26:07 +02:00
class ChampPolicy < ApplicationPolicy
class Scope < ApplicationScope
2019-06-27 16:26:07 +02:00
def resolve
if user.blank?
return scope.none
2019-06-27 16:26:07 +02:00
end
# Users can access public champs on their own dossiers.
resolved_scope = scope
.left_outer_joins(dossier: { groupe_instructeur: [:instructeurs] })
.where('dossiers.user_id': user.id, private: false)
if instructeur.present?
# Additionnaly, instructeurs can access private champs
# on dossiers they are allowed to instruct.
instructeur_clause = scope
.left_outer_joins(dossier: { groupe_instructeur: [:instructeurs] })
.where('instructeurs.id': instructeur.id, private: true)
resolved_scope = resolved_scope.or(instructeur_clause)
end
resolved_scope
2019-06-27 16:26:07 +02:00
end
end
end