Как узнать, какой тип пользователя обращается к коду метода действия в контроллере - mvc c # - PullRequest
1 голос
/ 04 октября 2011

Я не уверен, как задать этот вопрос или где его задать. Допустим, у меня есть cms, в которой есть три типа пользователей: продавец, производитель и служба поддержки (этот парень может получить доступ ко всей информации, которую розничный торговец и производитель могут получить доступ). Теперь допустим, что есть контроллер продуктов, у которого есть метод действия, который называется «просмотр списка продуктов». Теперь розничный продавец может просматривать продукты только на своем веб-сайте, а производитель - также, но служба поддержки клиентов может просматривать список производителей и розничных продавцов и выбирать, какие продукты он / она хочет просмотреть. Допустим, весь этот код находится в том же методе действия «просмотреть список продуктов». Теперь это хорошая практика? Иметь весь код для всех трех типов пользователей в одном методе действия? Во-вторых, как мне выяснить, какой код должен (если условие) должен выполняться внутри метода действия, основываясь на типе пользователя, предполагая, что я использую встроенную в систему входа в систему систему mvc и роли.

Ответы [ 3 ]

0 голосов
/ 04 октября 2011

Ваши действия - это ваши точки доступа.Вы не должны иметь разные действия для каждой роли.Что произойдет, если у вас будет 30 ролей?У тебя будет 30 действий?

Еще раз, контроллер - это только ваша точка доступа, поэтому пользователь переходит на URL, он перенаправляется к правильному методу действия, а затем метод должен направить пользователя к правильной бизнес-логике.Это ваша бизнес-логика, которая должна выяснить, разрешено ли им выполнять действие или нет.MVC - это только ваша презентация, так каковы шансы, что вам придется использовать другой уровень презентации в ближайшем будущем?

0 голосов
/ 05 октября 2011

(1) Хорошо иметь это в одном методе действия, вы не хотите создавать новые методы действия, если добавлены новые роли.

(2) Вы можете использовать, например,

If User.IsInRole("CustomerSupport") { ... }

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

[Authorize(Roles = "Retailer, Manufacturer, CustomerSupport")]
0 голосов
/ 04 октября 2011

На мой взгляд, хорошо, если у вас одинаковые действия для всех трех типов пользователей.Есть несколько способов достичь того, что вы хотите.Пожалуйста, посмотрите на внедрение зависимости, например.Вы хотите, чтобы ваш метод хранилища (отвечающий за выдачу данных) был разным для каждого типа (вы можете использовать шаблон фабрики, чтобы генерировать разные классы хранилища для разных типов пользователей, а затем внедрить его в класс, который извлекает данные).

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