Большие системы используются многими пользователями, поэтому они могут входить в систему, а затем иметь дополнительные разрешения. Разрешения разные, например, разрешение на просмотр подробной информации о других пользователях или разрешениях для выполнения разных действий. Хорошая практика в разработке программного обеспечения - использование шаблонов проектирования. Одним из них является MVC (Model-View-Controller). Итак, мой вопрос: в каком слое модели должны были проверять разрешения? Является ли эта логика приложения проверкой прав пользователя или, возможно, на уровне зрения, некоторые параметры должны быть скрыты/заблокированы/и т.д.?Пользовательское разрешение в шаблоне проектирования MVC
ответ
Аутентификация и авторизация не являются частью шаблона проектирования MVC. И это не является прямой обязанностью любого из основных строительных блоков MVC.
Решение, которое вы можете изучить, - это установить контроль доступа в декораторе.
Вы создаете экземпляр Container
, в который вы можете вводить объект (это может быть какой-то контроллер, вид или, может быть, сервис из уровня модели) и некоторый диспетчер авторизации. Затем вы вызываете метод на этом контейнере, как если бы это был исходный объект. Если вызов очищается с помощью диспетчера доступа, вы выполняете этот метод. В противном случае вы вызываете исключение.
К сожалению, пример кода в PHP, потому что это мой "родной" язык
$something = new SomeThing;
$data = $something->getSensitiveData(); // will simply return all the information
$accessCheck = new AccessManager(.. some dependencies ..);
$something = new Container($something, $accessCheck);
try
{
$data = $something->getSesitiveData();
// will return all information if you pass the authorization.
}
catch (AccessDeniedException $e)
{
// do something
}
Этот подход имеет ряд преимуществ:
- Управление доступом осуществляется централизованно
- Вы можете ввести любой экземпляр в такой контейнер
- Не причинит OCP нарушение
- Давайте вы отложить добавление авторизации при разработке
«упаковки» в таком декоратора будет происходить, как правило, в пределах завода, который создает экземпляр.
Что касается части триады MVC, вы должны быть обертыванием. Ну ... обычно достаточно обернуть контроллер (особенно при работе с MVC в контексте Web). Но, в зависимости от того, как вы структурируете остальную часть кода, может быть разумным добавить такие проверки авторизации также для служб (группа классов/экземпляров в слое модели).
Дело в том, что этот подход не имеет ограничений по детализации. Вы можете добавить этот тип контроля доступа на любой объект. Даже если у вас нет доступа к исходному коду этого объекта.
- 1. Контроллер в шаблоне проектирования MVC
- 2. Полиморфизм в шаблоне проектирования
- 3. Пользовательское разрешение поля модели MVC 4
- 4. Пользовательское разрешение Django внутри шаблона
- 5. альтернатива ENUM в шаблоне проектирования
- 6. Процессы в шаблоне проектирования последовательности
- 7. Подождите, пока пользовательское разрешение
- 8. AVCaptureSession указывает пользовательское разрешение
- 9. Пользовательское разрешение Joomla
- 10. Пользовательское разрешение импорта IronPython
- 11. Пользовательское разрешение для приложения
- 12. Trac билет-пользовательское разрешение
- 13. Пользовательское разрешение IActionРезультаты в aspnet-5 mvc-6
- 14. Пользовательское разрешение для деятельности
- 15. Пользовательское разрешение на звонки
- 16. Вопрос о возможном шаблоне проектирования
- 17. Пользовательское разрешение i asp.net web api
- 18. Окно подтверждения В шаблоне проектирования MVVM
- 19. Простая выборка данных в шаблоне проектирования флюса
- 20. предложения на шаблоне проектирования в Java
- 21. Пользовательское разрешение для Android 1920x1200
- 22. Пользовательское разрешение с неявным намерением
- 23. Django Admin, пользовательское разрешение checkbox
- 24. Пользовательское разрешение для ambari-сервера
- 25. Пользовательское разрешение WCF веб-службы
- 26. Добавить пользовательское меню навигации в шаблоне Wordpress
- 27. Пользовательское разрешение на конкретное расширение в Joomla
- 28. grails Весенняя безопасность пользовательское разрешение в контроллере
- 29. Пользовательское разрешение на уровне филиала в Git?
- 30. пользовательское разрешение и защита страниц в asp.net
Смотрите этот вопрос в разделе «Разработка программного обеспечения»: https://softwareengineering.stackexchange.com/questions/220574/where-should-user-permission-checks-take-place-in-and-mvc-and-by-who – Flimm