فهم عمر سمة فئة نموذج القضبان
-
13-11-2019 - |
سؤال
تبحث عن أفضل طريقة للقيام التحقق من صحة الملكية في نموذج القضبان دون النفخ وحدات تحكم بلدي.هذا يعني أنني بحاجة إلى تمرير المستخدم الحالي إلى النموذج بطريقة ما.
أقوم حاليا بتعيين سمة فئة على طراز المستخدم إلى المستخدم الحالي في بداية كل طلب:
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])