Я ищу элегантный шаблон для решения этой проблемы:
У меня есть несколько пользовательских ролей в моей системе, и для многих моих действий контроллера мне нужно иметь дело с немного другими данными.
Например, взять
/Users/Edit/1
Это позволяет Moderator
редактировать адрес электронной почты user
s, но Administrator
s редактировать адрес электронной почты и пароль пользователя.
Я бы хотел разработать схему для разделения двух разных битов кода действия для GET
и POST
.
Решения, которые я придумала до сих пор:
- Переключение внутри каждого метода, однако это не очень помогает, когда мне нужны разные аргументы модели на POST: (
- Фабрика пользовательских контроллеров, которая выбирает
UsersController_ForModerators
и UsersController_ForAdmins
вместо просто UsersController
из имени контроллера и текущей роли пользователя
- Вызывающий пользовательский экшн, который выбирает метод
Edit_ForModerators
аналогично указанному выше
- Иметь IUsersController и зарегистрировать другую реализацию его в моем контейнере IoC в качестве именованного экземпляра на основе роли
- Сборка реализации контроллера во время выполнения с использованием Castle DynamicProxy и манипулирование методами с использованием реализаций на основе ролей
Я предпочитаю именованный атм маршрута IoC, так как все мои URL / маршрутизация будут работать без проблем.
Идеи? Предложения?