MVC3 доступ к данным профиля пользователя за пределами контроллера - PullRequest
0 голосов
/ 21 октября 2011

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

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

Есть ли способ получить доступ к данным профиля пользователя без необходимости передавать их в качестве параметра от контроллера? Я мог бы передать значение через конструктор, но мы надеемся, что есть более чистый способ сделать это. Я видел сообщения на SO о том, как получить личность пользователя, но не полный профиль.

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Наша структура такова, что для каждого контроллера существует одна viewModel

Это неправильная структура.У вас должна быть модель представления для каждого представления, а не модель представления для контроллера.

Есть ли способ получить доступ к данным профиля пользователя, не передавая их в качестве параметра из контроллера?

Нет, и не рекомендуется иметь сервисслой, который тянет такие данные.Эти данные должны быть переданы на сервисный уровень от его владельца (который является уровнем пользовательского интерфейса)

При этом в ASP.NET MVC существует больше способов MVCish для обеспечения авторизации пользователя.Одним из примеров является написание пользовательского атрибута [Authorize], который будет выполняться перед каждым действием и проверять, авторизован ли пользователь для доступа к информации.

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

Моя единственная мысль - создать общий родительский ViewModel, который включает в себя UserProfile в качестве общего поля.

Итак, создайте BaseViewModel и установите каждый ViewModel для наследования от BaseViewModel. Единственное изменение в ViewModelGenerator должно заключаться в том, что вам нужно установить соответствующие значения для вашего UserProfile в конструкторе.

Я использую здесь публичность для простоты, но если это проблема безопасности, вероятно, будут использовать как минимум защищенные методы получения и установки. Что-то похожее на:

public class ViewModel1 : BaseViewModel {   
    public ViewModel1 ()
      :base(UserProfile profiledata){
           //Constructor code for ViewModel1   
    } 
}

и в BaseViewModel:

public class BaseViewModel{
   public UserProfile profile;    
   public BaseViewModel(UserProfile prof){
      profile = prof;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...