Rails 3, Как разделить действия на одном контроллере между двумя учетными записями? - PullRequest
0 голосов
/ 04 марта 2012

Как я могу разделить действия между двумя учетными записями?чтобы каждая учетная запись могла просматривать только определенный набор действий на одном контроллере?

Существует ли простой способ перенаправить неправильную учетную запись на конкретное представление?

Вот мой сценарий:

Я создал два типа учетных записей:

  • Инструктор
  • Ученик

Существует контроллер, который оба типа учетных записей могут посещать определенные действия наэто:

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]

...

но, как ни странно, иногда, когда я захожу в действие редактирования на контроллере выше с использованием учетной записи инструктора, devise будет запрашивать аутентификацию ученика, ипредставление редактирования не будет отображено, хотя инструктор может просматривать редактирование

Обратите внимание, что before_filter :authenticate_student! утверждает, что: only => [: browse_courses,: register_course] должен быть аутентифицирован для учетной записи студента, поэтому, почемудействие редактирования тоже аутентифицируется для студента?(на нем будет виден знак студента)

Правильно ли указан код выше?или есть лучший подход к этой проблеме?

1 Ответ

0 голосов
/ 04 марта 2012

Devise - это инструмент аутентификации .Не пытайтесь реализовать авторизацию с ним.

Позвольте Devise идентифицировать ваших пользователей и использовать что-то еще для управления их привилегиями.Лично мне нравится CanCan Райана Бейтса.

С ним ваш контроллер будет выглядеть так:

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

CanCan имеет довольно простой и мощный способ определениякто что может сделатьПрочитайте это: Определение способностей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...