Как использовать роли для сегментирования ViewModels / Controllers / Views - PullRequest
0 голосов
/ 01 апреля 2012

Я работаю над проектом ASP.NET для школы.В одной области я хочу иметь возможность обслуживать почти идентичные представления для сотрудников и студентов - единственное реальное отличие - это отображаемые данные.

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

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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Похоже, что на SO уже есть довольно хороший ответ asp.net mvc - динамический контроллер, основанный на аутентифицированном пользователе . Это в основном позволяет создавать разные контроллеры на основе аутентификации. Вы можете сделать это еще проще, разделив визуальное представление данных на разные частичные представления, хранящиеся в общем каталоге, чтобы представления разных контроллеров могли использовать одни и те же частичные представления для отображения html.

1 голос
/ 01 апреля 2012

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

http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/

        public ActionResult Index()
        { 
            if (User.Identity.IsAuthenticated)
            {
                MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);

                if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved)
                {
                    var currentUserId = (Guid)currentUser.ProviderUserKey;

                     // get user data maybe somethink like that ....
                    Usser result = (from userdata in b.users
                                       where userdata.Id == currentUserId
                                       select userdata).FirstOrDefault();

                    return View(result);
                }
            }

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