Как перенаправить пользователей в зависимости от их роли в рельсах 3? - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь выяснить, как перенаправить пользователей по определенному 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 «роль» в таблице пользователей.)

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

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

1 голос
/ 08 февраля 2011

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

Если вы пытаетесь получить доступ к массиву 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
...