سؤال

لدي علاقة كثيرة مثل هذه: مستخدم Has_many من المنظمات من خلال الانتماءات والعكس.

أنا أستخدم المنظمات التصريحة وأريد فقط المستخدم تحرير مؤسسة معينة إذا كان تابعا وسمة التابعة للانتماء قيمة معينة.

لذلك فإن الانتماءات لديها 3 أعمدة، user_id، underation_id والانفاني Type_id

أستطيع أن أفعل:

o = Organization.find(:first)
o.affiliatons[0].user and get the user

الآن أتمنى أن أفعل هذا:

has_permission_on [:organizations], :to => :edit do
  if_attribute (...)
end

يجب أن يرى ذلك If_Attribe إذا كان المستخدم الحالي هو المنظمة. (؟].

آمل أن تكون هذه مشكلة بناء الجملة ... أحتاج حقا إلى الحصول على هذا العمل.

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

المحلول

تعديل:

يمكنك تقييد نوع الانتماء مع intersects_with (& block) :

  has_permission_on [:organizations], :to => :edit do
    if_attribute :affiliations => intersects_with {
      user.affiliations.with_type_3
    }
  end

لماذا لا تنشئ NAMED_SCOPE للعثور على الانتماءات التي انضمامها) = 3؟


من الوثائق البيانية_إعلانية:

لتقليل التكرار في كتل Has_permission_on، قد تعتمد قاعدة على أذونات الكائنات المرتبطة:

authorization do
  role :branch_admin do
    has_permission_on :branches, :to => :manage do
      if_attribute :managers => contains {user}
    end

    has_permission_on :employees, :to => :manage do
      if_permitted_to :manage, :branch
      # instead of
      #if_attribute :branch => {:managers => contains {user}}
    end
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top