宣言型承認では、検証を行うために params[:id] が必要なようです。URL ではなく、ユーザーがセッションに保存される /profile や /dashboard などのパスを使用したいと考えています。しかし、それは壊れます。宝石自体をハッキングせずにこれを行う方法についてのアイデアはありますか?
4 に答える
宣言型承認では、検証を行うために params[:id] が必要なようです
filter_resource_access
これは、コントローラーでインスタンス変数を設定することに依存している場合にのみ当てはまります。を指定して、独自の認可スキームを設定できますfilter_access_to
。これにより、セッション変数、モデル属性など、好きなものに基づく独自のカスタム メソッドを設定できます。
このイントロダクションのコントローラ セクションでは、説明filter_access_to
といくつかの例を示します。
アプリケーションにユーザーがいる場合、認証プラグインを使用しないのはなぜですか? 私は Restful 認証を使用しており、いくつかの作業で完全なセッション管理を実現しています。current_user
あなたの問題のために、このプラグインには、セッションを開いたユーザーを取得するヘルパーメソッドがあります。
ソリューションを実装するよりも、Restful Authentication (またはレスポンス #1 のような AuthLogic) などのプラグインに依存する方がよいと思いますが、ニーズをよりよく知ることができます ;)
メソッドを取得できるようにdeviseを使用しますcurrent_user
。
filter_access_to
の代わりに使用しfilter_resource_access
ます。
私は AuthLogic を使用していますが、私が知る限り、「current_user」はルート経由でアクセスできません。
コントローラーで、params[:id] == "current_user" (文字列として) かどうかを確認し、それに基づいていくつかのロジックを実行する必要があります...つまり:
if params[:id] == "current_user"
@user_id = current_user.id
else
@user_id = params[:id]
end
@user = User.find(@user_id)
非常に単純な例ですが、カスタム ルートから current_user を取得するために必要なロジックのタイプを示す必要があります。current_user の名前付きルートを独自のコントローラー アクションにマップすることもできますが、これはあまり RESTful ではなく、[ほとんどの場合] 既に持っている機能と重複します。