рельсы 3 написание метода контроллера, чтобы проверить, какой тип является current_user - PullRequest
1 голос
/ 22 декабря 2011

Я пытаюсь написать метод в моем контроллере приложения, который был бы доступен для всех контроллеров.Это простая роль ролей.

def user_is_admin
    if current_user.admin == true
    end
  end 

Если текущий вошедший в систему пользователь имеет значение .admin, установленное в значение true, этот метод должен возвращать значение true.

Тогда в моем контроллере я делаю: before_filter: user_is_admin,: only => [show]

Хотя код не содержит ошибок, он также не защищает страницу от просмотра.

есть идеи?

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Вам необходим before_filter, чтобы сделать что-то, чтобы прервать действие, если текущий пользователь не является администратором.

def user_is_admin
    if current_user.admin != true
        redirect_to <some_other_action> 
        return false
    end
end 

Обратите внимание, что это проверка того, что current_user НЕ является администратором.Кроме того, вы можете вызвать исключение или отобразить шаблон ошибки без перенаправления:

def user_is_admin
    if current_user.admin != true
        raise "Admin required"
    end
end 

или

def user_is_admin
    if current_user.admin != true
        render :template => 'shared/admin_required'
        return false
    end
end 
1 голос
/ 22 декабря 2011

Вы просите что-то другое, чем то, что делает ваш код.

То, что вы хотите, чтобы ваш метод делал, это что-то вроде этого:

def user_is_admin
  redirect_to root_url, notice: "You do not have sufficient privileges for that!" unless current_user.admin
end

Где root_url - это место, куда они будут перенаправлены. Вам все еще нужен фильтр before_filter.

0 голосов
/ 22 декабря 2011

Вы имеете в виду это?

def user_is_admin
  redirect_to "/" unless current_user.admin
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...