すべてのユーザ認証コードをlib/auth.rbという1か所に配置しました。それは次のようになります。lib/
のlib/auth.rb
module Admin
def do_i_have_permission_to?(permission)
# Code to check all of this goes here
end
end
私は、アプリケーションヘルパーの一環として、このモジュールを含むので、これらの機能はすべてのビューで使用できます。
application_helper .rb
require 'auth'
module ApplicationHelper
include Admin
# other stuff here
end
また、アプリの一部としてlicationコントローラ、コントローラは、同様に、関数を呼び出すことができるように:
application.rb
require 'auth'
class ApplicationController < ActionController::Base
include Admin
end
これまでのところ、とても良いです。
問題は、私のアプリケーションが通常のWebアプリケーションのようではないということです。具体的には、複数のユーザーが同じコンピューターから同時に(同じブラウザーを使用して)システムにログインすることができます。私はそのIPからログインしているすべての人々を見て行動の認証を行い、すべてがそれを行うことができるなら、それは合格します。
これは、管理者が何かをしたい場合、その管理者はまず他の人をすべてログアウトしなければならないということです。これは面倒です。しかし、私たちは、管理者が行うすべての承認の管理シールを必要としています。だから、私に与えられた提案は、管理者が通常はアクセスできないページにユーザ名/パスワードのコンボを提供できるようにすることでした(例えば、「ユーザの編集」ページにこれらの余分な入力フィールドがあります)。それを確認してください。これは、現在のリクエストパラメータで取得する必要があることを意味します。
Admin::do_i_have_permission_to?(permission)
私はコントローラーのようにparams [:foo]を使うことはできません。なぜなら、paramsは定義されていないからです。同様にrequest.parameters [:foo]も機能しません。私の検索が明らかにした:
- 現在の検索パラメータは、現在の要求であり、
- 現在のリクエストが現在のコントローラであり、
- 電流コントローラは、現在のディスパッチャであり、かつ
- I現在のディスパッチャがどこにでも置かれているかどうかわかりません。
- 現在、auth.rbにあるすべての機能をApplicationHelperに移動するだけで、要求にアクセスすることができます。うまくいきますが、ヘルパーの手を抜いてしまいます。
- すべての機能を他の場所に移動すると、それらのメソッドが表示されます(私には分かりません)
- 私は何か不足しています。
私は、この多くのフープを飛び越えているとき、私はおそらくそれが間違っていると感じています。だからそれを行う正しい方法は何ですか?私が検討したオプションは次の通りです:
:
フルフレームワークの例は、このようなリストバンドのユーザ認証システムとして、より多くの助けになるかもしれませんコントローラ(私はこれをより明確にするために上記を編集しました) 私は示唆したように、前述のすべての機能を備えたauthentication_helper.rbファイルを作成しましたが、他の場所では見えません。 (私のコントローラーに「ヘルパー:認証」を入れても「NoMethodError」が出てきます) これらの機能が必要な理由は、上記で概説したとおりです。どこでも:コントローラ、ビュー、テストなど – Atiaxi
ああ、私のすべてのauthentication_helper.rb関数は、独自のモジュール(AuthenticationHelper)に入っています - 'include AuthenticationHelper'を入れて、 – Atiaxi
コントローラメソッドでもあるヘルパメソッドが必要な場合は、helper_method呼び出しでタグ付けされた保護されたApplicationControllerメソッドのセットが本当に必要です。 例: def is_user_admin? false end helper_method:is_user_admin? – tadman