Files
manyfold/app/controllers/concerns/permittable.rb
T

34 lines
1.1 KiB
Ruby

module Permittable
extend ActiveSupport::Concern
included do
before_action :find_caber_subjects, only: [:create, :update] # rubocop:todo Rails/LexicallyScopedActionFilter
end
def find_caber_subjects
params.values.each do |param|
if param.is_a?(ActionController::Parameters) && param.has_key?("caber_relations_attributes")
param["caber_relations_attributes"].transform_values! do |value|
raise ActiveRecord::RecordNotFound if value["subject"].blank?
subject = case value["subject"]
when "role::member"
Role.find_by!(name: :member)
when "role::public"
nil
when Group::TYPED_ID_PATTERN
Group.find_by_typed_id(value["subject"], scope: policy_scope(Group))
else
User.match!(identifier: value["subject"], scope: policy_scope(User))
end
value["subject_id"] = subject&.id
value["subject_type"] = subject&.class&.name
value
rescue ActiveRecord::RecordNotFound
nil
end
param["caber_relations_attributes"].compact!
end
end
end
end