1

私には、ワーカーと管理者の2種類のユーザーがいます。私は労働者のテーブルと管理者のテーブルを持っています。ユーザーがアプリケーションページに入る前に、ユーザーに強制的にサインインさせたいのですが。そこで、次の行にApplicationControllerを追加しました。

`before_filter :authenticate_user!`

ここで、呼び出される関数を作成しました。この関数はis_worker、ユーザーがワーカーテーブルにあるかどうかを確認します。もしそうなら、彼を労働者のページにリダイレクトします。ユーザーが見つからない場合は、管理者ページにリダイレクトします。

ワーカーが管理者ページに入ることができず、管理者がワーカーページに入ることができないようにしたいと思います。

だから私は:before_filter :is_workerを追加する必要があると思います:workerscontrolleradminscontroller

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :authenticate_user!

  def is_worker
     @email = current_user.email
     tag = Worker.where(:email => @email)
     if tag.nil?
        redirect_to '/admins'
     else
        redirect_to '/workers'
     end
  end
end

私が間違っている場合は訂正してください。

4

1 に答える 1

3

あまり効率的ではありません。STIを使用していると仮定して、次のis_worker?ようなメソッドを作成します。

def is_worker?
  current_user.type == 'Worker'
end

次に、コントローラーに次のようなメソッドを追加できます。

def redirect_after_sign_in
  if current_user.is_worker?
    redirect_to '/admins'
  else
    redirect_to '/workers'
  end
end

私はそれをプライベートメソッドにします。次に、ユーザーが正常にログインした後で、このメソッドを呼び出すことができます。

それでも、ワーカーが/adminsURLにアクセスして管理者データを表示できないように、アプリケーションをコントローラーレベルで保護する必要があります。

于 2012-12-29T16:09:06.463 に答える