Как узнать, какой тип пользователя обращается к коду метода действия в контроллере — mvc c#

#c# #asp.net-mvc-3 #asp.net-mvc-2

#c# #asp.net-mvc-3 #asp.net-mvc-2

Вопрос:

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

Ответ №1:

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

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

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

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

 [Authorize(Roles = "Retailer, Manufacturer, CustomerSupport")]
  

Ответ №2:

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

Ответ №3:

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

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