سؤال

تبحث عن أفضل طريقة للقيام التحقق من صحة الملكية في نموذج القضبان دون النفخ وحدات تحكم بلدي.هذا يعني أنني بحاجة إلى تمرير المستخدم الحالي إلى النموذج بطريقة ما.

أقوم حاليا بتعيين سمة فئة على طراز المستخدم إلى المستخدم الحالي في بداية كل طلب:

class User < ActiveRecord::Base
  cattr_accessor :current_user
end

class ApplicationController < ActionController::Base
   before_filter :set_current_user
   def set_current_user
     User.current_user = current_user
   end
end

لست متأكدا مما إذا كنت أفهم تماما عمر المستخدم.المستخدم الحالي في هذا السيناريو.هل من الممكن أن تتغير القيمة أثناء الطلب?

أريد في المقام الأول أن أعرف ما إذا كان ما سبق آمنا للاستخدام ، وأيضا إذا كان هناك نهج أفضل.

هل كانت مفيدة؟

المحلول

للإجابة على الجزء الأول من سؤالك.سيتم حفظ السمة في الذاكرة حتى يتم مسح فئة المستخدم / إرسالها إلى جامع القمامة.هذا عادة عندما يغلق VM أو المترجم.

في بيئة مثل Heroku، يمكن تخزين هذا المتغير بين الطلبات وسيعمل مستخدم غير مصادق الوصول إلى أحدث مستخدم من خلال الوصول إلى هذا المتغير، ما لم يتم مسحها عند الانتهاء من أول مستخدم.

نصائح أخرى

هذا هو بالتأكيد النهج الصحيح إذا كنت تريد أن تتوافق مع أفضل الممارسات. current_user هي طريقة تحكم ، ومن خلال اتباع سلسلة المسؤولية نمط User يجب ألا يعرف النموذج من هو المستخدم الحالي.

هذا ليس أسلوبًا آمنًا :) حافظ على حالتك في وحدات التحكم ومنطق العمل ضمن النماذج.

إذا كان المستخدم الحالي بحاجة إلى المرور إلى طبقة النموذج، فلا ينبغي للنموذج أن يهتم بمن هو.يمكنك دائمًا استخدام الارتباطات لتصفية الوصول إلى المحتوى.

current_user.widgets.find(params[:id])

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top