2012-03-04 8 views
0

2つのアカウント間でアクションを分割するにはどうすればよいですか?各アカウントは同じコントローラ上の特定のアクションセットのみを表示できますか?Rails 3、2つのアカウント間で同じコントローラでアクションを分割する方法は?

間違ったアカウントを特定のビューにリダイレクトする簡単な方法はありますか?両方のタイプは、上の特定のアクションを訪れることができますアカウントコントローラがあり

  • インストラクター
  • 学生

私は2つのアカウントの種類を作成している:ここで

は私のシナリオですそれ:

class CoursesController < ApplicationController 

    # instructors are allowed to view all action's views, except :browse_courses, :register_course 
    before_filter :authenticate_instructor!, 
       :except => [:browse_courses, :register_course] 

    # students are allowed to view only :browse_courses, :register_course 
    before_filter :authenticate_student!, 
       :only => [:browse_courses, :register_course] 

...

しかし、間違いなく、インストラクターアカウントを使用して上のコントローラーで編集操作を行った場合、教師は学生認証を要求し、編集ビューはレンダリングされません編集を表示することができます

注意:は、学生アカウントに対してのみ=> [:browse_courses、:register_course]が認証されるので、編集アクションが学生に対しても認証される理由を教えてください。 (学生のサインを見ることができます)

コードは上記の通りですか?またはこの問題のより良いアプローチがありますか?

答えて

0

Deviseは認証ツールです。 承認を実装しないでください。

Deviseでユーザーを識別し、その特権を処理するために他のものを使用しましょう。私は個人的にはCanCanのようにRyan Batesによる。それによって

、あなたのコントローラは、次のようになります。

class CoursesController < ApplicationController 
    def browse_courses 
    authorize! :show, Course # throws exception if not authorized 

    # proceed here 
    end 

    def register_course 
    authorize! :register, Course 

    # proceed here 
    end 
end 

カンカンは何を行うことができます誰が定義するのはとても簡単で強力な方法があります。これを読む:Defining Abilities

+0

ありがとうございましたセルジオですが、それは 権限ではありません! :show、CoursesController の代わりに を承認してください! :ショー、コース?ショーはCoursesControllerのためのアクションです、そうですか? – simo

+0

実際にはありません。あなたはCanCanのwiki(全部)を読んだことがありますか? –

+0

ありがとう、私はそれを読んだ、確かにCanCanは答えです – simo

関連する問題