в моем контроллере приложений у меня есть метод, чтобы проверить, авторизован ли текущий пользователь для действия. Я использую этот метод как из других контроллеров, так и из представлений. Как я могу определить, вызывается ли метод из представления или из контроллера?
Это необходимо, потому что ответ отличается (показывать предупреждение и перенаправление с контроллера, скрывать ссылку при просмотре). Возможно, я делаю что-то в корне неправильно, и мне следует решить это совершенно иначе?
Контроллер приложения:
helper_method :is_allowed
# Check if current user is allowed to perform action
def is_allowed(required_level)
# Required level is level and all levels above (1=high, 3=low)
# level 1: user
# level 2: company_admin
# level 3: admin
case required_level
when 'company_admin'
unless current_user.role == 'company_admin' || current_user.role == 'admin'
flash[:alert] = I18n.t(:not_allowed)
redirect_to root_path
end
when 'admin'
unless current_user.role == 'admin'
flash[:alert] = I18n.t(:not_allowed)
redirect_to root_path
end
end
end
Вызов с другого контроллера (это работает):
before_filter :only => [:destroy] do |c| c.is_allowed 'company_admin' end
Вызов из вида (работает, но не должен перенаправлять, а только скрывать ссылку):
<% if is_allowed('company_admin') %>
<td><%= link_to I18n.t(:delete), relation, :method => :delete, :confirm => I18n.t(:sure) %></td>
<% end %>