C# MVC: как обновить роли пользователей?

У меня есть модель представления, которая предоставляет несколько общедоступных виртуальных ролей ICollection { get; набор; }

Это отлично подходит для возврата к тем ролям, к которым принадлежит пользователь. Но как мне обновить роли пользователя из формы.

Для тестирования я попытался добавить скрытое поле под названием «Роли» и ввел как «Администратор», так и его GUID в качестве значения для отправки обратно на сервер:

<input type="hidden" name="Roles" value="Admin" />
<input type="hidden" name="Roles" value="7feab829-b86c-4a94-90bf-f35e9ce04b01" />

Однако при переходе на сервер я вижу, что таким образом создается недопустимое состояние модели. Будем очень признательны за любые предложения!


person Simon Hopwood    schedule 10.06.2013    source источник
comment
Зачем вам обновлять их роли из формы? Если вы хотите обновить роли, вы должны сделать это с помощью всего отдельного (и аутентифицированного) действия контроллера, а не возврата от клиента. Помните, никогда не доверяйте клиенту.   -  person David L    schedule 10.06.2013
comment
Я создаю контроллер для обновления пользователя (имя/пароль/и т. д.). Я подумал, что это было бы отличным местом для обновления ролей. Все будет аутентифицировано.   -  person Simon Hopwood    schedule 10.06.2013
comment
Я могу понять разрешение пользователю обновлять свое имя и пароль, но вы также хотите, чтобы они могли обновлять свои роли? Я просто хочу убедиться, что понимаю ваше намерение. Кроме того, используете ли вы поставщика членства по умолчанию?   -  person David L    schedule 10.06.2013
comment
Это не для конечного пользователя - Это отдельный админ раздел для обновления пользователей системы :) Я понимаю, почему вы волновались, не понимая этого :)   -  person Simon Hopwood    schedule 10.06.2013
comment
Попался. В таком случае, вы можете опубликовать свой контроллер? Я подозреваю, что вам понадобится раскрывающийся список доступных ролей, а также что-то в вашей почтовой модели, в которой есть выбор роли из раскрывающегося списка.   -  person David L    schedule 10.06.2013
comment
Мой контроллер очень легкий -- pastie.org/8030944 WebSecurity.Register регистрирует созданного пользователя, затем я планирую вызов Roles.AddUserToRole(‹username›, ‹role›); чтобы добавить требуемую роль. Должен ли я просто передать их как строки? И написать код для их разбора в контроллере?   -  person Simon Hopwood    schedule 10.06.2013


Ответы (1)


В свете ваших комментариев я вижу несколько простых решений. Во-первых, удалите скрытые поля ввода. Они ничего вам не купят и только навредят вам, когда вы пойдете проверять модель.

  1. Используйте раскрывающиеся списки для ролей и передайте их обратно в свою модель. Значение должно быть выбором.
  2. Передайте их как строки и проанализируйте в контроллере, как вы упомянули.
  3. Используйте радиальные параметры, каждый с уникальным идентификатором. Передайте идентификатор и сопоставьте этот идентификатор со значением в вашем контроллере.

В контроллере вы абсолютно правы. Получите роль и вызовите Roles.AddUserToRole().

Я думаю, что вы уже на правильном пути :).

person David L    schedule 10.06.2013
comment
Моя проблема в том, что я использую модель представления для возврата пользователя, который включает в себя: public virtual ICollection‹Role› Roles {get; набор; } Обратная передача строки ролей недопустима для этой модели, не так ли? - person Simon Hopwood; 10.06.2013
comment
Хм, так зачем отправлять их вниз, если вы просто собираетесь отправить их обратно? Затем вам следует рассмотреть возможность создания системы флажков для отправки List‹Roles› или List‹string› или какого-либо другого списка, или просто разрешить добавление/удаление одной роли за вызов, ИЛИ полностью удалить роли - person David L; 10.06.2013