У меня есть трехуровневое решение MVC: MVC Web — бизнес-уровень — уровень доступа к данным
У меня есть настраиваемые таблицы для пользователей и групп в серверной части базы данных, группы пользователей сопоставляются с настраиваемой структурой разрешений. Аутентификация должна проверять присутствие пользователя, а авторизация должна проверять, что пользователь может делать на основе своих разрешений.
Я могу выполнить аутентификацию и авторизацию, внедрив пользовательский AuthorizeAttribute и запросив уровень обслуживания, существует ли HttpContext.User.Identity.Name в пользовательской таблице, а также проверить разрешения пользователя на основе контроллера и действия.
Однако уровень обслуживания должен повторно авторизовать пользователя при вызове из действия в контроллере. Это позволяет лучше контролировать, что пользователь может и что не может делать — например, некоторые поля доступны только для чтения или скрыты в зависимости от членства в группе пользователей.
Проблема в том, что я закончу аутентификацию и авторизацию пользователя как в AuthorizeAttribute действия контроллера, так и из самого действия контроллера (через уровень обслуживания).
Это проблема дизайна больше, чем что-либо еще, но я хотел посмотреть, подхожу ли я к проблеме наилучшим образом!