ASP.NET MVC 3 Администратор и настройка участника - PullRequest
1 голос
/ 12 января 2012

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

Я использую ASP по умолчанию.Шаблон проекта NET MVC 3 в Visual Studio 2010.

Приложение будет иметь следующие роли: Admin, Tutor и Client.

У меня сложилось впечатление, что для функциональности сайта я должен бытьреализация отдельных контроллеров и представлений для каждой роли.

Как насчет того, может ли пользователь-администратор добавлять информацию против Tutor или Client.Будут ли эти функции добавлены в AdminController и в представление для конкретного администратора?

Спасибо за любую помощь в этом.

Ответы [ 2 ]

1 голос
/ 12 января 2012

Что касается Authoirization (против ваших 3 ролей), это легче всего обрабатывать на уровне метода действия.Вы украшаете метод действия с помощью [Authorize (Roles = "Admin")].

Относительно вашего контроллера и вида дизайна, это может зависеть от того, как вы хотите, чтобы ваша структура URL выглядела, и хотите ли вы следоватьСоглашения MVC3.

По соглашению ваша схема URL будет выглядеть следующим образом:

www.site.com/controllerName -- defaults to index action method
www.site.com/controllerName/action -- specific action method
www.site.com/controllerName/action/id -- send optional argument to action method
www.site.com/controllerName/id -- send optional argument to index action method

Поэтому, если вы хотите, чтобы ваши URL были / Admins / dosomething, / Tutor / dosomething и / Clients / dosomething,и вы хотите придерживаться соглашений MVC, назовите свои контроллеры в соответствии с именами ваших ролей.

Если вы хотите, чтобы администратор выполнял функцию репетитора, добавьте это к методу действия:

public class TutorsController
{
    [Authorize(Roles = "Tutor,Admin")]
    public ActionResult DoSomething(string id) 
    {
        var isAdmin = User.IsInRole("Admin");
        // ...do stuff
    }
}

С учетом сказанного, ничто не мешает вам нарушать соглашения и разрабатывать ваш URLсхема отдельно от вашего контроллера и схема действия метода.Это будет просто больше работы, потому что вам придется создавать собственные маршруты.

Ответ на комментарии 1 & 2

Ваш второй комментарий ближе, и Бассам Маханни ответил на этот вопрос правильно .Функциональность для перечисления репетиторов должна идти на контроллере репетиторов.Если вы планируете использовать шаблоны DI / IoC / Repository, вы поймете, почему.Подумайте об этом с точки зрения того, над каким набором сущностей работает пользователь.Обычно лучше поместить весь доступ к сущности Tutors, установленной в TutorsController.Затем вы можете ограничить возможность просмотра Tutor'а этим списком примерно так:

public class TutorsController
{
    [Authorize(Roles="Admin")]
    public ActionResult ListAll()
    {
        // only admins can list all, tutors / clients cannot access this page
    }
}

Если это то, что вам нужно, должен быть соответствующий модульный тест, который гарантирует, что этот метод действия имеет фильтр авторизации,и что его свойство Roles равно «Admin».

Причина, по которой я рекомендую этот подход, заключается в том, что он облегчит работу, если позже вы решите использовать внедрение зависимости конструктора для репозитория.Если бы вы поместили некоторые элементы доступа к данным Tutors в AdminController, а другие элементы доступа к данным Tutors в TutorsController, вам пришлось бы внедрить ваш TutorsRepository в конструктор обоих контроллеров.

1 голос
/ 12 января 2012

По моему мнению, если вы модифицируете репетитора, TutorControllet должен иметь эту функцию независимо от типа пользователя, который выполняет модификацию.

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