mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 03:32:18 -05:00
35 lines
1.1 KiB
Ruby
35 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|
|
|
if value["subject"].present?
|
|
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
|
|
end
|
|
value
|
|
rescue ActiveRecord::RecordNotFound
|
|
nil
|
|
end
|
|
param["caber_relations_attributes"].compact!
|
|
end
|
|
end
|
|
end
|
|
end
|