لدي إضافة (plugin) تضيف نموذجًا يُدعى server يحتوي على حقل user_id. أريد أن يتمكن فقط مالك server من تنفيذ طلب POST (أو ربما يجب أن يكون PUT؟ — الإجراء سيقوم بإعادة بناء سطر أوامر لنسخة من Discourse على خادمهم؛ لست متأكدًا مما سيكون الأفضل من حيث الممارسات.)
في ملف config/routes.rb يوجد التالي:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
هل يُنصح بأن تتحقق matches? في ملف pfaffmanager_constraint.rb من path_parameters[:action] وتفرض الإذن هناك، أم أن ذلك يُفعل في servers_controller.rb؟
أيضًا، أعتقد أن ما يجب عليّ فعله حقًا هو نقل هذا المسار تحت namespace :user، لذا ربما بعد أن أحل هذه المشكلة، سيتم حلها كجزء من ذلك، لكن هذا يعمل تقريبًا، وأود الانتقال إلى السماح لآخرين بتجربة هذا الكود.
أعتقد أنك بحاجة إلى طريقة حارسة للتحقق مما إذا كان مسموحًا للمستخدم بتنفيذ إجراء معين. على سبيل المثال، can_upgrade_server?
أيضًا، بمجرد القيام بذلك، يمكنك استخدام طريقة guardian.ensure_can_upgrade_server! التي تتحقق من الشرط وتثير استثناءً، وهو ما أعتقد أنه بالضبط ما تريده.