Как перенаправить пользователей в зависимости от их ролей в rails 3?

Я пытаюсь понять, как перенаправить пользователей на определенный URL-адрес в зависимости от их роли после того, как они войдут в приложение Ruby/Rails3.

До сих пор я использовал authlogic gem для аутентификации и cancan gem для настройки ролей.

Роли такие же (определены в app/models/user.rb):

class User < ActiveRecord::Base
  acts_as_authentic
  ROLES = %w[admin customer demo]
end

Теперь есть app/controllers/user_session_controller.rb, который отвечает за вход в систему. Я хотел бы сделать что-то вроде этого:

for r in User.role
      if r == "admin"
        redirect_to admins_url
      else
        redirect_to users_url
      end
end

Это не работает из-за следующей ошибки:

"undefined method `role' for #<Class:0xb5bb6e88>"

Есть ли простой или элегантный способ перенаправить пользователей на определенные URL-адреса в соответствии с их ролями?

(Роли определяются в столбце mysql «роль» в таблице пользователей.)


person user607225    schedule 07.02.2011    source источник


Ответы (2)


for r in User.role сбивает с толку. Вы пытаетесь получить доступ к массиву ROLES, определенному в классе, или вы пытаетесь получить доступ к значению роли текущего пользователя?

Если вы пытаетесь получить доступ к массиву РОЛИ, используйте User::ROLES.

Используя authlogic, обычно определяют current_user в application_controller. Таким образом, роль текущего пользователя можно узнать с помощью current_user.role

Таким образом, ваш код может выглядеть примерно так

  if current_user.role == "admin"
    redirect_to admins_url
  else
    redirect_to users_url
  end
person Steve Wilhelm    schedule 08.02.2011
comment
@steve-wilhelm Это хороший момент. Я пытаюсь получить доступ к значению роли текущего пользователя. Но при использовании этого метода возникает ошибка: неопределенная роль метода для nil:NilClass - person user607225; 08.02.2011
comment
Вы добавили роль в миграцию таблицы пользователей и выполнили rake db: migrate? - person Steve Wilhelm; 08.02.2011
comment
Конечно, поля роли mysql заполняются правильными данными. например таблица: пользователи, столбец: роль, заполненная значением: администратор - person user607225; 09.02.2011

Вы обязательно должны проверить CanCan. Это довольно логичный способ управления ролями и способностями пользователей.

person maletor    schedule 08.02.2011