rails, можете ли вы помочь мне СУХОЙ, это обычная проверка «разрешено current_user» в моих контроллерах - PullRequest
0 голосов
/ 23 января 2012

Я новичок в области относительных рельсов, только начинаю изучать, как СУШИТЬ мой код, и не уверен, нужно ли мне создавать помощник, или декоратор, или метод модели, или какой-то класс перегрузки, чтобы сделать что-то очень часто "этот пользователь имеет доступ к этим данным?" проверка ....

Мое приложение rails 3.1 использует devise для аутентификации пользователей, и я (в соответствии с документами devise) добавил простой admin: логический флаг, который позволяет определенным пользователям делать то, что другие пользователи не могут (например, просматривать / редактировать профиль других пользователей)

для предотвращения подмены URL и т. Д. Я использую это в верхней части много моих методов:

if current_user.nil?
  redirect_to root_path, :alert => "You must sign in to do XXXX" and return
end
if !current_user.admin? && (current_user.id != MYMODEL.user_id)
  redirect_to MYMODEL_path, :alert => "The ZZZZ you tried to XXXXX is not yours" and return
end
if current_user.admin? && (current_user.id != MYMODEL.user_id)
  flash[:alert] = "Hey ADMIN: You know you are XXXX another user's ZZZZ, right?"
end

Сообщение в каждом случае отличается, но логика одинакова.

Может ли кто-нибудь показать мне самый простой способ разместить эту логику в одном месте (для одного контроллера), чтобы все методы в контроллере могли использовать ее (опционально), передавая 3 пользовательских сообщения?

1 Ответ

2 голосов
/ 23 января 2012

Как насчет before_filter?

Я бы порекомендовал против , явно говорящих пользователю, что есть действительный объект, который ему не разрешено редактировать;им не нужно это знать - просто скажите им, что он не найден.

Вы также можете исследовать драгоценные камни, такие как "канкан".

...