أفضل طريقة لتقييد الإجراءات (تحرير/حذف) مع Ruby on Rails والترميز

StackOverflow https://stackoverflow.com/questions/3834321

  •  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" الضمني إلى أذوناتك حتى تتمكن من تحديد وتأكد من أن المستخدم الحالي يمكن أن يتخذ الإجراءات المناسبة.

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