2015-05-28 1 views
1

У меня возникли проблемы с отключенными флажками.Рельсы, как отправить отключен флажок с true при проверке

Я пробовал два подхода. первые:

= check_box "permissions", "permission_#{row}[create]", {checked: has_permission?(@user, permission, "create")}, 'true', 'false' 

Эта опция отключена внутри зрения, но и проверила, но при представлении этого значение в моем Params выглядит следующим образом:

"create"=>"false" 

Так что, когда я обновлю свои атрибуты, созданный в изменено с true на false в моих параметрах.

Как я могу отправить true для своих параметров вместо false, когда установлен флажок отключен?

+0

Попробуйте первый флажок 'disabled', установленный в true:' <% = check_box "разрешений", "разрешение _ # {строка} [создать]", {checked: has_permission? (@ User, permission , "create")}, 'true', 'false', disabled: true%> '. Это может оставить его в стороне от ваших параметров. Нет гарантий, хотя – MCBama

+0

Флажок, который не указан в ваших параметрах, должен считаться ложным. Только считайте это истинным, если он проверен. –

+0

Когда поле формы html отключено, оно не будет возвращено серверу, поэтому оно будет отправлять только значение для скрытого поля (которое было бы ложным). Если вы хотите вернуть 'true' для отключенного поля, вы либо необходимо обновить скрытое поле или иметь собственное скрытое поле, чтобы отправить вам правильное значение. – FuzzyJulz

ответ

1

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

Поэтому я предлагаю удалить эти значения с params перед передачей модели независимо от того, например, исключив их из разрешенных параметров или выдав splice.

Таким образом, вы все равно будете показывать фактические разрешения, но игнорируете любые попытки изменить их без авторизации.

+0

В этом случае вместо этого я использую эту строку: '% input {: name =>" permissions [permission _ # {row}] [grant] ",: type =>" CHECKBOX ", checked: has_permission? (@ User, permission , "grant")} 'Мои отключенные параметры не отправляются в мои параметры. Это здорово! но он не отправляет неконтролируемое значение флажка, которое необходимо, если пользователь удаляет разрешение. – Jay

+0

Независимо от того, отправлены они или нет, это не имеет особого значения. Вредоносный пользователь может обработать любой запрос, поэтому вам лучше быть готовым к нему на стороне сервера. Что касается неконтролируемого значения, которое не отправляется, то одно решение, которое приходит на ум в псевдокоде, выглядит примерно так: 'if user_has_permission_to_change? ('Permission_0 [create]'); model.permitted = params ['permission_0 [create]']; end' (извините, в комментариях нет форматирования). Это предотвратит доступ пользователей, у которых нет разрешения на обновление значения, но установите флажки для тех, у кого есть разрешение на изменение разрешений. – SkyWriter

Смежные вопросы