Active_model_serializers ile izinleri nasıl serileştiririm? Modellerde ve serileştiricilerde current_user
veya can?
yöntemine erişimim yok.Active_model_serializers ile seri hale getirme izinleri (ör. CanCan)
cevap
Birincisi, yeni kapsam özelliği kullanmak, sıralandırıcı bağlamında current_user
erişmek için:
model.active_model_serializer.new(model, scope: serialization_scope)
: kapsamını geçmek
el serializers başlatmasını olan durumda
class ApplicationController < ActionController::Base
...
serialization_scope :current_user
end
, emin olmak
Ardından, serializer içinde, izinleri belirlemek için scope
(geçerli kullanıcı) kullanarak kendi yetkilendirme sözde özniteliklerinizi eklemek için özel yöntemler ekleyin.
attributes :can_update, :can_delete
def can_update
# `scope` is current_user
Ability.new(scope).can?(:update, object)
end
def can_delete
Ability.new(scope).can?(:delete, object)
end
Biz bu işlevselliği sağlayan bir mücevher yarattı: Eğer Cancan kullanıyorsanız
, sen can?
yöntemini erişmek için yeteneği sınıf örneğini olabilir https://github.com/GroupTalent/active_model_serializers-cancan
Ben bir şey geçebilir düşünüyorum serialization_scope
'u istiyorum, böylece Yeteneği geçiyorum.
class ApplicationController < ActionController::Base
...
serialization_scope :current_ability
def current_ability
@current_ability ||= Ability.new(current_user)
end
end
class CommentSerializer < ActiveModel::Serializer
attributes :id, :content, :created_at, :can_update
def can_update
scope.can?(:update, object)
end
end
Yeteneklerim aslında iki değişkene (yukarıdaki örnekte değil) dayalı olduğu için bunu yapamam.
Eğer hala current_user öğesine erişmeye ihtiyacınız varsa, Yeteneğe bir örnek değişkeni ayarlayabilirsiniz.
- 1. Seri hale getirme olayları
- 2. JSON.NET seri hale getirme hatası
- 3. JSONKIt seri hale getirme NSDIctionary
- 4. Seri hale getirme işlemlerini artırın:
- 5. XmlIgnoreAttribute, seri hale getirme sırasında değil, yalnızca seri hale getirme sırasında kullanılır?
- 6. Döngüsel referanslarla seri hale getirme yapılabilir mi?
- 7. Tablo satırlarındaki girişleri seri hale getirme (jQuery)
- 8. Bir nesneyi JSON'a seri hale getirme
- 9. Boost :: serialization kullanarak XML'e seri hale getirme
- 10. Seri hale getirme hakkında GetObjectData çağrısı
- 11. Pasaportun anlaşılması seri hale getirme serileştiriyor
- 12. Yapıların bir STL haritasını seri hale getirme
- 13. PHP uyumlu seri hale getirme C/C++
- 14. Web API - Dinamik XML seri hale getirme
- 15. .NET 2.0'da JSON'a seri hale getirme
- 16. Süper sınıf üzerinden seri hale getirme/serileştirme
- 17. Django dayanak çerçevesindeki seri hale getirme yordamı
- 18. Java nesnelerini Java koduna seri hale getirme
- 19. Kurucu, seri hale getirme sırasında bulunamadı?
- 20. Bir django-haystack queryset'i seri hale getirme
- 21. Seri hale getirme/serpiştirme JSON.NET ile nesne tanımı
- 22. Moshi JsonAdapter.Factory ile seri hale getirme sırasında alan değerlerini kaybetme
- 23. Yapılandırılmış Klonlama Algoritması ile uyumlu seri hale getirme biçimi?
- 24. .NET'te seri hale getirme sırasında isim alanı öneklerini desteklemek için XML seri hale getirme özelliklerini nasıl belirtebilirim?
- 25. İç içe serilaştırıcıyı seri hale getirme yöntemi alanına dön
- 26. Özel MySQL oturum deposu sağlayıcısı - seri hale getirme sorunu
- 27. Üretilen WCF proxy kodunu serileştirme/seri hale getirme nasıl yapılır?
- 28. Raylar - seri hale getirici parametre geçişi
- 29. Gson dönüştürücü fabrika güçlendirmesi2. Seri hale getirme/serileştirme farklı türleri
- 30. Nitelikler ve alt öğelerle nesneyi seri hale getirme
Anlamıyorum - kendi sorunuzu hemen cevapladınız mı? –
Evet, yaptım - [bu makale] konusuna bakın (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/). Bu bilginin korunmasını istedim, ancak blogumda yayınlamak için çok önemsiz/uzman bulduğum için, burayı buraya yazdım, Soru & Cevap stili. –
@JoLiss "super.merge" stiline alternatif olarak, "can_update,: can_delete" öznitelikleri diyebilir ve sonra can_update ve can_delete'yi serializer'daki yöntemler olarak tanımlayabilirsiniz. Ya işe yarıyor. – tee