У меня есть требование для авторизации на уровне лица, которая откровенно лежит над моей головой. Я надеюсь получить некоторые рекомендации по этой структуре разрешений, как я могу реализовать ее в .NET 4.5, и если есть способы, я могу ее улучшить.Контроль доступа на уровне сущности в иерархической схеме передачи данных
Вот он идет:
У меня есть набор данных, структурированных следующим образом:
Где
Fleet
представляет собой набор из нуля или болееCars
.Fleet
может содержать другиеFleets
флоты может быть позднее реорганизован и перемещен в организационных целях.
У меня есть несколько ролей с правами в системе, которые относятся к этим лицам:
- Владелец: Можно добавить или удалить автомобилей из парка
- Менеджер: Назначает водителям автомобилей
- Водитель: разрешено просто управлять автомобилем
- Механик: разрешено закрепить автомобиль
Логика авторизации позволяет для User
в системе, чтобы предоставить доступ к или Fleet
или Car
с одной или несколькими ролями.
Вот несколько сценариев, чтобы помочь объяснить:
- Если я предоставить
User
Джим доступ кFleet
# 5 с рольюDriver
, ему разрешается водить любой автомобиль под 2 флота #. Полученные разрешения позволяют ему водить автомобили # 4, 5, 6 - Если я предоставляю пользователю Maura доступ к
Car #1
в качестве механика, результирующие разрешения позволяют ей исправить только автомобиль №1. - Если я предоставить пользователю Sarah доступ к Fleet # 2 с ролями
Owner
иMechanic
, она может добавлять и удалять автомобили флотов # 2, 4, 5 И она позволила исправить автомобилям # 1, 2, 3, 4, 5, 6. - Если я предоставить пользователь Джереми доступ к флоту № 1 в качестве
Owner
И флота № 6 в качествеDriver
, полученных разрешения позволяют ему добавлять и удалять автомобили всех флотов И драйва автомобилей # 7, 8. Он не может управлять любым другим автомобилем, кроме # 7 и 8.
Что такое хороший подход к этому разрешению объекта уровня?
Если это имеет значение, мы используем .NET 4.5.1 с EF6 Code First, построенный на основе ASP.net Boilerplate.