active_model_serializersで権限をシリアル化するにはどうすればよいですか?モデルとシリアライザでcurrent_user
またはcan?
メソッドにアクセスすることはできません。active_model_serializersでアクセス許可をシリアル化する(CanCanなど)
8
A
答えて
22
まず、新しいスコープの機能を使用し、シリアライザコンテキストでcurrent_user
へのアクセスを得るために:
model.active_model_serializer.new(model, scope: serialization_scope)
:
class ApplicationController < ActionController::Base
...
serialization_scope :current_user
end
スコープを渡すようにしてください、手動でシリアライザをインスタンス化する場合には
シリアライザの内部で、独自の認証擬似属性を追加するカスタムメソッドを追加し、scope
(現在のユーザー)を使用してアクセス許可を決定します。
あなたはカンカンを使用している場合は、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
2
私たちは、この機能を提供宝石作成:私はあなたが何かにあなたを渡すことができると思いhttps://github.com/GroupTalent/active_model_serializers-cancan
2
をserialization_scope
にしたいので、私は単に能力を渡します。
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
私の能力は実際には2つの変数(上記の例ではない)に基づいているため、私は他にはできません。
current_userにアクセスする必要がある場合は、単にインスタンス変数を「能力」に設定することができます。
関連する問題
- 1. Cancanの許可
- 2. Cancanユーザーの許可ですか?
- 3. 循環参照が許可されていない - Jsonシリアル化
- 4. アクセス許可()にアクセス許可の問題などがありません
- 5. Rails 3 - CanCan - 作成の許可を定義する
- 6. rails CanCan:ユーザーが特定のアクセス許可を自分自身で設定できるようにする(フォトギャラリーユースケース)
- 7. VirtuosoでSPARQLアクセス許可をスクリプト化する方法
- 8. SharePoint 2010でUserProfileManagerのアクセス許可を許可する
- 9. Androidの実行時のアクセス許可 - ユーザーがアクセス許可を許可し、それをonRequestPermissionsResultで受信しない
- 10. プロパティがシリアル化可能でないエラー
- 11. どのバージョンコントロールがファイルレベルでのアクセス許可を許可していますか?
- 12. FileProvider - アクセス許可
- 13. ()のアクセス許可を後で?
- 14. アクセス制御許可ヘッダーでAngularJS要求アクセス制御許可ヘッダーが許可されていない
- 15. MySQLでのアクセスを許可するコマンド
- 16. ラッパーでアクセス許可を確認する
- 17. WAMPで0.0.0.0アクセスを許可する
- 18. 不可能なアクセス許可の問題
- 19. 可能な同期モードのアクセス許可
- 20. コードナビホワイトリスト許可許可ナビゲーションとアクセス元
- 21. Sparkでシリアル化可能でないコードをテストする方法
- 22. アクセス制御 - 許可アクセス元 -
- 23. 異なるアクセス許可Firebase Auth
- 24. Android 6アクセス許可 - 外部アプリのアクセス許可を管理する
- 25. Mac OSXでのアクセス許可
- 26. ネイティブインタフェース(アンドロイド)でのアクセス許可
- 27. IOSアクセス許可プログラムで
- 28. AndroidのMテストREAD_PHONE_STATE(危険なアクセス許可)の許可
- 29. CentOSでセットアップアカウントなしでアクセスを許可する方法
- 30. Vistaのアクセス許可
私は理解していません - あなたはすぐにあなた自身の質問に答えましたか? –
はい、私はしました - [この記事](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)を参照してください。私はこの知識を保存したかったのですが、私のブログに投稿するのはそれほど簡単ではないことがわかったので、Q&Aスタイルで投稿しました。 –
@JoLiss "super.merge"スタイルの代わりに、 'attributes:can_update、:can_delete'と言って、シリアライザのメソッドとしてcan_updateとcan_deleteを定義することができます。いずれにしてもうまくいく。 – tee