Если пользователь не вошел в систему, current_user будет равен нулю. Вам придется защититься от этого дела. Здесь тоже что-то не хватает. Независимо от того, что возвращает метод, вызванный фильтром, действие всегда будет продолжаться. За исключением метода, который вызывает рендеринг или перенаправление в фильтр.
Вот рабочий фильтр, который делает то, что вы пытаетесь сделать, если у вас есть именованный маршрут с именем denied.
require_role "company" ** This is working fine
before_filter :company_required
def company_required
redirect_to denied_url unless logged_in? && current_user.company_id == Company.find(params[:id])
end
Вы можете добавить маршрут, добавив следующее в config/routes.rb перед блоком маршрута по умолчанию. Вы можете использовать существующий контроллер или создать новый, если хотите. Это то, что я обычно использую:
map.denied '/denied', :controller => "home", :action => "denied"
Как утверждают другие, похоже, что вы используете Restful Authentication. Возможно, вам будет полезно взглянуть на documentation, чтобы лучше понять процесс входа в систему. Краткая версия заключается в том, что пользователь отправит форму, идентифицирующую их как член вашего приложения, в session_controller, который устанавливает current_user. Если вы запустили генератор, вы должны получить доступ к указанному выше logged_in? метод.
session_controller и current_user могут быть чем-то другим в вашем приложении, так что вы дали аргументы Resten Authentication differenet.
Какая ошибка? Также в вашем примере кода есть синтаксическая ошибка, можете ли вы исправить это? –
Итак, теперь я понял, что мне нужно использовать current_user.company.id для вызова правильного идентификатора. Или, по крайней мере, вызов этого в любом представлении работает. Но теперь это всегда позволяет мне пройти. Ошибок нет. Я жестко закодировал его, чтобы сказать current_user.company.id == '1', пока я просто попытаюсь заставить его работать. Любые идеи? – 2009-09-17 03:39:46
Проблема заключается в том, что вы сравниваете идентификатор с объектом компании Вы должны сделать это current_user.company_id == Company.find (PARAMS [: идентификатор]). ID – nasmorn