Мне сложно понять сильные параметры. Я понимаю, что это предотвращает массовое присвоение переменных, которые вы не позволяете. Но в Hartl's tutorial я также читал, что без сильных параметров кто-то может изменить, например, любой пользовательский статус администратора через запрос патча (который, я думаю, не является массовым назначением, потому что это только одно значение, которое вы изменили бы). Но тогда как же реализовать сильный Params для переменных:Обоснование сильных параметров и переменных, допустимых только для некоторых пользователей
- Должен быть разрешен только установить один раз (при создании нового пользователя)
- Некоторых пользователей должны быть в состоянии изменить, но другие не
Например, у меня есть:
private
def user_params
params.require(:user).permit(:email,
:username,
#:verified,
#:admin,
#:moderator,
#:activated,
#:activated_at,
:password,
:password_confirmation)
end
Теперь те, с тиром я понимаю, не должны быть разрешены. В противном случае пользователи могут изменять свои значения посредством массового присвоения (или иначе).
Однако:
- административного пользователя (который является конкретным пользователем из тех же таблиц/контроллера) должны иметь возможность изменить эти переменные для всех пользователей.
- В случае с моим приложением организации (другая таблица) должны иметь возможность предоставлять права модератора пользователя и, таким образом, изменять эти значения для пользователей.
- Имя пользователя должно быть установлено только при создании нового пользователя и после этого никогда не должно быть разрешено изменять. Теперь, разрешив имя пользователя в strong_params, это не означает, что он уязвим для изменения посредством массового присвоения?
Как сильные параметры относятся к этим проблемам?
Я никогда не занимался этим, но мое мнение по моему опыту: у 'user_params' может быть условие, которое проверяет разрешения' current_user' и устанавливает атрибуты 'allow' на основе этого условного. –
Что касается изменения имени пользователя, я бы справился с этим в модели или имел 'new_user_params'. –