if_attribute على إذن تصريح
-
19-09-2019 - |
سؤال
لدي علاقة كثيرة مثل هذه: مستخدم 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
لا تنتمي إلى StackOverflow