2011-12-21 5 views
1

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

def user_is_admin 
    if current_user.admin == true 
    end 
    end 

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

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

Хотя код не erroring, его также не защищает страницы от просмотра.

любые идеи?

ответ

1

Вам нужно, чтобы 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 
0

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

def user_is_admin 
    redirect_to "/" unless current_user.admin 
end 
1

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

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

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

Спасибо за редактирование, не знаю, почему я так не набирал его :) – andrewpthorp

Смежные вопросы