Jak serializować uprawnienia przy pomocy aktywnych_modeli_serializatorów? Nie mam dostępu do metody current_user
lub can?
w modelach i serializerach.Uprawnienia do szeregowania (np. CanCan) z aktywnymi_modelami_serializatorami
Odpowiedz
Po pierwsze, aby uzyskać dostęp do current_user
w kontekście serializer, korzystać z nowej funkcji zakres:
class ApplicationController < ActionController::Base
...
serialization_scope :current_user
end
W przypadku, gdy instancji serializers ręcznie, należy przekazać zakres:
model.active_model_serializer.new(model, scope: serialization_scope)
Następnie wewnątrz serializera dodaj niestandardowe metody, aby dodać własne pseudo-atrybuty autoryzacji, używając scope
(bieżący użytkownik) w celu określenia uprawnień.
Jeśli używasz kankana, można zainicjować klasę możliwość dostępu do metody can?
:
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
stworzyliśmy klejnot, który zapewnia tę funkcję: https://github.com/GroupTalent/active_model_serializers-cancan
myślę, że można przekazać cokolwiek chcesz serialization_scope
, więc po prostu przekazuję umiejętność.
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
Nie mogę zrobić inaczej, ponieważ moje umiejętności są oparte na dwóch zmiennych (nie w powyższym przykładzie).
Jeśli nadal potrzebujesz dostępu do current_user, możesz po prostu ustawić zmienną instancji na umiejętność.
- 1. Szeregowania tablicy z Jacksonem
- 2. Aktualizacja błędów z Rails 3.0.9 do Rails 3.1 z CanCan
- 3. Stream podczas szeregowania z Cap'n'Proto
- 4. Szeregowania z JAXB i Dowolna
- 5. JSON: Typy szeregowania wyprowadzone z IEnumerable
- 6. Przekazywanie parametrów do CanCan w RoR
- 7. szeregowania F # typów opcji
- 8. szeregowania XNA Prostokąt z Json.NET
- 9. Autoryzacja kontekstowa przy użyciu CanCan
- 10. Zintegruj Mongoid i CanCan
- 11. CanCan "niezdefiniowana rola metody?" z opracowują
- 12. Jak zintegrować CanCan z wieloma modelami devise?
- 13. Uprawnienia Role i uprawnienia
- 14. Klonowanie obiektów bez szeregowania
- 15. CanCan i kontrolery bez modeli
- 16. Sprawdź uprawnienia do plików
- 17. Uprawnienia do folderu udostępnionego!
- 18. Uprawnienia do obcinania tabeli
- 19. cancan skip_authorization_check for Devise authentication
- 20. Szyny: Używanie CanCan do przypisywania wielu ról do użytkowników dla każdej organizacji, do której należą?
- 21. Najlepsze praktyki dla szeregowania/Deserializacji z Java do XML
- 22. CanCan load_and_authorize_resource wyzwala Niedozwolone atrybuty
- 23. Wyjątek InvalidOperationException podczas szeregowania
- 24. Korzystanie opracować/CanCan/Rolify razem
- 25. Wykrywanie wyjątku OutOfMemoryException podczas szeregowania z JSON?
- 26. Szeregowania wartości null w Json.NET
- 27. szeregowania słowniku NET
- 28. Szeregowania listę aby JSON
- 29. Szeregowania podzbiór postaci
- 30. Cykliczne odniesienie podczas korzystania z szeregowania XML?
Nie rozumiem - czy od razu odpowiedziałeś na własne pytanie? –
Tak, zrobiłem - zobacz [ten artykuł] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/). Chciałem, aby ta wiedza została zachowana, ale uznałem, że jest zbyt trywialna/wyspecjalizowana, aby publikować na moim blogu, więc napisałem ją tutaj, w stylu pytań i odpowiedzi. –
@JoLiss Jako alternatywę dla stylu "super.merge" możesz powiedzieć 'attributes: can_update,: can_delete', a następnie zdefiniować can_update i can_delete jako metody w serializatorze. Albo działa. – tee