2016-05-16 5 views
0

GrapeでAPIエンドポイントを構築しています。Grape APIを使用している専門家のポリシー_スコープ

私はscopeの下にあります

class JourneyPolicy < ApplicationPolicy 

    def create? 
    user && user.identt_id == record 
    end 

    class Scope 
    attr_reader :user, :scope 

    def initialize(user, scope) 
     @user = user 
     @scope = scope 
    end 

    def resolve 
     scope.where(user_id: user.id).latest 
    end 
    end 
end 

そして今、私は私のブドウのリソースにこのpolicy_scopeを使用したい、我々はレールコントローラでpolicy_scope(Journey)を使用することができますが、私はそれがブドウのエンドポイントでの作業することはできません。

class Journeys < Grape::API 
    resources :journeys do 
    get do 
     @journeys = policy_scope(Journey) 
     present @journeys, with: Entities::Journey 
    end 
    end 
end 

これは動作していない、と私はpolicy_scopeためNoMethodErrorを取得しています。

私はブドウのポリシーを使用したいと任意の助けをいただければ幸いです:)

注:

私のようなリソースを許可するためにブドウのエンドポイントで動作しているコードの下にあります

error!("Unauthorized Access!", 401) unless JourneyPolicy.new(journey, uid).create? 

おかげ

+0

を働いていますRailsを使ったことはありませんでしたが、policy_scope()メソッドはRailsにのみ存在すると思います。私は確信していませんが、あなたはJourneyPolicy.new(journey、uid).createを使うべきだと思いますか?代わりに。 – Marlon

答えて

0

これが最善の解決策ではないかもしれませんが、私はヘルパーメタを作成しましたgrapeでODが手動のようなpolicy_scope命名:

def policy_scope(user, scope) 
    policy = "#{scope}Policy::Scope".constantize 
    policy.new(user, scope).resolve 
    end 

、私は次のように私のブドウの資源からpolicy_scopeヘルパーを呼び出すことができます。

policy_scope(current_user, Journey) 

、それは私が私のため

おかげ

関連する問題