Как вы реализуете роли и безопасность в своих проектах C# Domain Driven Design? У нас ведутся споры о том, должно ли оно быть реализовано в вызывающем приложении (ASP.NET MVC) или в самой модели предметной области (объекты и службы модели). Некоторые утверждают, что это должно быть на самом веб-сайте, поскольку там уже существует аутентификация. Но это означает, что каждый раз, когда вы интегрируетесь с основными бизнес-системами, вам придется заново реализовывать систему безопасности.
В качестве примера: администратор должен иметь возможность выполнять практически любые действия в системе, такие как редактирование и удаление записей (т. е. они могут удалять заказы пользователей). Пользователь, с другой стороны, должен иметь возможность редактировать и удалять только свои собственные записи (т. е. он может добавлять/удалять товары из своей корзины).
Кстати, вот хороший тезис на эту тему, который охватывает 7 различных сценариев, касающихся DDD и безопасности:
Безопасность в доменно-ориентированном проектировании
- Chapter 4 Security service design scenarios
- 4.1 Scenario 1: Security service as regular service
- 4.2 Сценарий 2: Безопасность, встроенная в пользовательский интерфейс
- 4.3 Сценарий 3. Служба безопасности, инкапсулирующая модель предметной области
- 4.4 Сценарий 4: Служба безопасности как шлюз для пользовательского интерфейса
- 4.5 Сценарий 5: Служба безопасности как адаптер для пользовательского интерфейса
- 4.6 Сценарий 6: Служба безопасности, интегрированная АОП с адаптерами
- 4.7 Сценарий 7: Служба безопасности интегрирована с АОП
Я лично склоняюсь к АОП с использованием PostSharp, но, поскольку я мало что делал с ним раньше, я не решаюсь сделать прыжок.