2016-03-15 7 views
1

Я собираюсь разделить администратор и обычный пользовательский раздел моего проекта ASP.NET MVC 5.2. Моя область администрирования и обычная пользовательская область имеют много общего, однако привилегии и детали для каждого из них разные.ASP.NET MVC: разделение проблем для пользователя normal/admin

Прямо сейчас я не знаю, как отделить область администратора и обычную пользовательскую область. Я не знаю, должен ли я создать другой проект для admin-панели или мне просто нужно направить администратора на другой путь и использовать одни и те же контроллеры? Или мне нужно перейти на другой путь и использовать разные виды/контроллеры?

И вопрос стороны, возможно ли иметь реальную физически разделенную админку и обычную пользовательскую область в том же решении ASP.Net MVC или нет?

+0

Знаете ли вы о территориях MVC? – DavidG

+1

Я думаю, что реальный вопрос заключается в том, что вы используете 'Areas', как вы можете избежать чистого дублирования кода, если вам нужна панель администратора, чтобы выглядеть как обычное приложение + другое административное устройство –

+0

@RoyalBg спасибо за ваши уведомления. кажется, это то, что я ищу – VSB

ответ

2

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

В пользу разделения проблем, контроллеры должны иметь логику «кода», а другой уровень должен иметь «бизнес-логику». Например. Контроллеры могут определять, как называются свойства, но не как долго имя пользователя. Имя пользователя должно быть длинным как минимум 3 символа, независимо от того, какие контроллеры пытаются зарегистрировать пользователя.

Вся эта операция с моделями сущностей для удовлетворения требований бизнес-кейсов должна быть перенесена на отдельный слой. Обычно называется уровнем обслуживания.

Чтобы все ваши контроллеры могли использовать любую из этих служб, не зная из бизнес-сценария.

Простым примером здесь являются два действия контроллера - одно из - редактирование собственного профиля, а другое - администратор, редактирующий произвольный профиль пользователя.

[Authorize] 
public IActionResult Edit(UserViewModel model) { 
    if(model.Id != this.CurrentlyLoggedUser.Id) { 
     return this.RedirectToAction(...); 
    } 

    var userService = new UserService(); // inject maybe 
    userService.EditById(model.Id, model); 

    return this.View(); 
} 

и админ действие

[Authorize("Admin")] 
public IActionResult Edit(UserViewModel model) { 
    var userService = new UserService(); // inject maybe 
    userService.EditById(model.Id, model); 

    return this.View(); 
} 

Логика "код" здесь - создать сервис, вызвать инкапсулированный редактирования логики. Также некоторые соображения безопасности, о которых следует позаботиться, - Authorize и Authorize Admin.

+0

Знаете ли вы какие-либо книги или ссылки, в которых есть этот тип информации? – VSB

+0

Совсем нет. Для этого существуют какие-то обсуждения и статьи MSDN. Взгляните на официальную статью шаблона репозитория http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and -unit-of-work-patterns-in-as-asp-net-mvc-приложение и репозиторий обсуждения или уровень обслуживания в SO http://stackoverflow.com/questions/4368134/asp-net-service-vs- хранилищу слои –