2


0

URLのパラメーターとしてユーザーIDを常に保持せずに宣言型承認を使用するにはどうすればよいですか?

宣言的な承認では、検証を行うためにparams [:id]が必要と思われるので、URLではなくセッションにユーザーが保存されている/ profileや/ dashboardなどのパスを使用したいです。 しかし、それは壊れます。 gem自体をハッキングせずにこれを行う方法についてのアイデアはありますか?

4 Answer


3


_ 宣言的な承認では、検証を行うためにparams [:id]が必要なようです _

これは、コントローラでインスタンス変数を設定するために `filter_resource_access`に依存している場合にのみ当てはまります。 `filter_access_to`を指定することにより、独自の認可スキームを設定できます。 これにより、セッション変数、モデル属性など、好きなものに基づいて独自のカスタムメソッドを設定できます。

このhttp://github.com/stffn/declarative_authorization[introduction]のコントローラーセクションでは、「filter_access_to」について説明し、いくつかの例を示します。


1


アプリケーションにユーザーがいる場合、なぜ認証プラグインを使用しないのですか? 私は安らかな認証を使用し、いくつかの作業で完全なセッション管理を行っています。 あなたの問題のために、このプラグインにはセッションが開かれているユーザーを取得するヘルパーメソッド `current_user`があります。

ソリューションを実装するよりも、Restful Authentication(またはレスポンス#1のようなAuthLogic)のようなプラグインに依存した方が良いと思いますが、ニーズがよくわかります;)


0


私はAuthLogicを使用していますが、私が知る限り、「current_user」にはルートを介してアクセスできません。

コントローラで、params [:id] == "current_user"(文字列として)かどうかを確認し、それに基づいていくつかのロジックを実行する必要があります…​ i.e:

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ではなく、既存の機能を(ほとんどの場合)複製します。


0


deviseを使用して、 `current_user`メソッドを取得できます。

filter_resource_access`の代わりに filter_access_to`を使用します。