كيفية منع إجراءات المستخدم في CanCan

في ملفي ability.rb ، كيف يمكنني تعيينه بحيث يمكن للمستخدمين المحددين فقط القيام بأشياء ، وإلا (مستخدم غير معروف/غير مسجل الدخول) لا يستطيع فعل أي شيء؟

مثال:

def initialize(user)
    user ||= User.new #not logged in user
    if user.admin_user?
        can :manage, :all
    else
        #can't do anything. Cannot view, edit, or update.
    end
end

شكر!

0

2 إجابة

لم أستخدم أبداً CanCan أبدًا ، لكنني بحثت في المستندات ، ولا أعتقد أنك بحاجة إلى تحديد ما لا يمكن للمستخدم فعله بشكل صريح.

يجب أن تكون قادرًا على فعل شيء كهذا في وحدة التحكم الخاصة بك:

if cannot? :destroy, @project 
  # redirect the user or do something else to disallow access
end

cannot? should return true if the user wasn't assigned a role that has any abilities defined. Conversely can? would return false.

0
وأضاف

يمكنك تجربة مجموعة شرطية بسيطة في وظيفة التهيئة الخاصة بك:

# app/models/ability.rb
def initialize(user)
  if user && user.admin_user?
    # Abilities for registered admin users
    can :manage, :all
  elsif user
    # Abilities for registered users
    can :read, :all
  else
    # Abilities for no user
  end
end

عندما يتم استدعاء تهيئة ، من المحتمل أن يكون المستخدم على الأرجح (حسب حل التوثيق) nil لعدم تسجيل دخول المستخدمين ، مما يؤدي إلى تشغيل الفرع الأخير .

0
وأضاف