Как разместить логику для нескольких разных ролей в ASP.net MVC 2 - PullRequest
1 голос
/ 25 сентября 2010

Я немного новичок в ASP.NET MVC, и у меня есть небольшое испытание.Я разрабатываю веб-сайт с несколькими ролями в нем, и, конечно, логика и интерфейс, которые получает пользователь, зависят от роли (дух).

В этом приложении есть 10 отдельных ролей.Они имеют практически одинаковую функциональность, но некоторые экраны будут различаться в зависимости от того, в каких ролях они играют.

Вот мой вопрос.Все примеры и учебные пособия, которые я читал в Интернете, и книгу Apress, которую я читал, показывают пример того, как реализовать роли с одной ролью (Admin), в которой обычным способом является предоставление администратора (или даже области администратора)для авторизованного раздела сайта.Однако что, если есть 10 ролей?Мне действительно нужно кодировать 10 отдельных контроллеров?

Позвольте мне помочь с вопросом, подробно описав, что разрабатывается.Будет меню, и пункты меню будут отфильтрованы по роли того, какие виды (или страницы) они могут и не могут получить.Из того, что они выбирают, он предоставит им ограниченный вид (или авторизованную страницу), который изнутри предоставит множество функциональных возможностей, ограниченных только этой ролью.

Я знаю, что есть несколько различных способов сделать это,Я просто хочу знать, что является рекомендуемым или «чистым» способом.

Кто-нибудь из вас был в такой ситуации, и если да, то как вы организовали логику для нескольких ролей?Разделить все роли на отдельные контроллеры?Есть несколько контроллеров, но просто применить авторизацию фильтрации на методы действий?Применить фильтрацию ролей в представлениях или частичных представлениях и оставить контроллеры в покое?

К сожалению, ресурсов для реализации нескольких ролей мало, я просто хочу знать, как это сделать "правильным" способомс точки зрения разделения логики.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Используйте Авторизацию для методов действия и применяйте роли, разрешенные для операции.

В зависимости от того, что подходит для сценария, создайте список доступных действий из контроллера и отправьте это в представление как частьмодель представления.В некоторых случаях более уместно посылать более простую модель представления, которая сообщает представлению, разрешена ли каждая операция, т.е. CanDelete, CanEdit, CanViewDetailedInfo и т. Д.

Я бы начал с этого, и в зависимости от фактической сложностикоэффициент для любой комбинации:

  • ActionFilter, который заполняет доступные действия / вместо того, чтобы явно выполнять это в контроллере
  • Использовать рефлектор для поиска списка ролей, применяемых в авторизации /таким образом, вы определяете роли только один раз
  • Ваши собственные помощники html, которые принимают во внимание авторизацию.Поэтому, когда вы объявляете ссылку действия, она выводится только тогда, когда поддерживается действие.
0 голосов
/ 25 сентября 2010

Я бы поместил части функциональности в частичные представления.Имейте один контроллер для каждой части сайта и загружайте частичные представления в зависимости от роли и того, что должно быть выставлено.

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

Независимо от разделения контроллера, я бы определенно использовал частичные представления, чтобы минимизировать дублирование аналогичного кода.Вы сможете воспользоваться преимуществами, когда вам понадобится сохранить этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...