أفضل طريقة لتقييد الإجراءات (تحرير/حذف) مع Ruby on Rails والترميز
-
26-09-2019 - |
سؤال
أنا جديد إلى حد ما على Ruby on Rails والآن أقوم بتطبيق بسيط. في هذا التطبيق ، يمكن للمستخدم إنشاء العديد من العناصر وأستخدمها للمصادقة. Ofcourse ، أريد أن أتأكد من أنك المالك من أجل حذف العناصر (الفرق واللاعبين وما إلى ذلك) والطريقة التي أقوم بها الآن هي:
def destroy
@team = Team.find(params[:id])
if current_user.id == @team.user_id
@team.destroy
redirect_to(teams_url, :notice => 'The team was deleted.')
else
redirect_to root_path
end
end
هل هذا افضل طريق؟ كنت أفكر في وضع طريقة في النموذج ، لكنني لست متأكدًا من أنه يمكنني الوصول إلى Current_user من هناك. كنت أفكر أيضًا في قبل _filer ، شيء مثل:
before_filter :check_ownership, :only => [:destroy, :update]
أنا هذه الحالة وإذا كنت أرغب في ترميز طريقة واحدة فقط لجميع الكائنات (جميع الكائنات تتعلق بوجود "user_id"-حقل)
المحلول
في وحدة تحكم التطبيق الخاصة بي وضعت:
before_filter :authorize
def authorize
false # Or use code here to check if user is admin or not
end
ثم أقوم بتجاوز طريقة التصريح في وحدة التحكم الفعلية الخاصة بي للسماح بالوصول إلى إجراءات مختلفة.
نصائح أخرى
أنت تبحث عن حل ترخيص أعلى المصادقة الخاصة بك (ابتكار)
لا يمكنك الوصول إلى المستخدم الحالي في النموذج رقم. لقد حققت قدرًا لا بأس به من النجاح باستخدام مكاندرا Aegis للترخيص. يتيح لك إنشاء أدوار تحديد أذونات تُنسب إلى كل دور. المستندات جيدة جدًا وأعلم أنها تعمل بشكل جيد مع ابتكارها ، إنها غير ملائمة إلى حد ما ، لقد استخدمتها أيضًا مع التخليص. كما أنه يمرر "Current_user" الضمني إلى أذوناتك حتى تتمكن من تحديد وتأكد من أن المستخدم الحالي يمكن أن يتخذ الإجراءات المناسبة.