У меня есть модель пользователя, созданная Devise. Итак, перед фильтром authenticate_user.пользовательский фильтр - где писать этот код?
Я использовал STI и создал еще 2 модели пользователя UserA < User, UserB < Пользователь.
У пользователя есть поле 'type', которое определяет, имеет ли пользовательский объект тип 'UserA' или 'UserB'.
У меня есть некоторые контроллеры, в которых я хочу, чтобы определенный фильтр, например, можно было увидеть только по типу пользователя UserA или UserB. Итак, я хочу, чтобы написать фильтр, как это:
def authenticate_usera
if current_user.type == 'usera'
return true
else
return false
end
def authenticate_userb
if current_user.type == 'userb'
return true
else
return false
end
Вопрос:
Так, где я должен поставить этот фильтр код? И, могу ли я использовать это в контроллере:
before_filter: authenticate_usera
Кроме того, нужно ли использовать что-либо вроде «require» для того, чтобы этот фильтр был доступен в этом случае?
'current_user.type == 'usera'' должен быть методом в вашей модели пользователя – apneadiving
спасибо за это. Это прекрасно с этим, что ответ? То, что мы пишем в фильтре, - это другая проблема, я хочу знать, как настраивать аутентификацию или фильтр-контроллер. – user2139745
Это довольно насыщенная зависимость. Чего хочет ваш контроллер? Он хочет знать, может ли current_user получить доступ к чему-то. Он не должен знать о типе пользователя или что-то еще. Например. current_user.can? (: access, an_object) и который вернет, сможет ли пользователь выполнить это действие. Например. модель User должна заботиться об этом, а не о контроллере. Проверьте cancan: https://github.com/ryanb/cancan – Senjai