3

У меня есть требование для авторизации на уровне лица, которая откровенно лежит над моей головой. Я надеюсь получить некоторые рекомендации по этой структуре разрешений, как я могу реализовать ее в .NET 4.5, и если есть способы, я могу ее улучшить.Контроль доступа на уровне сущности в иерархической схеме передачи данных

Вот он идет:


У меня есть набор данных, структурированных следующим образом:

enter image description here

Где

  • Fleet представляет собой набор из нуля или более Cars.
  • Fleet может содержать другие Fleets

флоты может быть позднее реорганизован и перемещен в организационных целях.

У меня есть несколько ролей с правами в системе, которые относятся к этим лицам:

  • Владелец: Можно добавить или удалить автомобилей из парка
  • Менеджер: Назначает водителям автомобилей
  • Водитель: разрешено просто управлять автомобилем
  • Механик: разрешено закрепить автомобиль

Логика авторизации позволяет для User в системе, чтобы предоставить доступ к или Fleet или Car с одной или несколькими ролями.

Вот несколько сценариев, чтобы помочь объяснить:

  1. Если я предоставить UserДжим доступ к Fleet# 5 с ролью Driver, ему разрешается водить любой автомобиль под 2 флота #. Полученные разрешения позволяют ему водить автомобили # 4, 5, 6
  2. Если я предоставляю пользователю Maura доступ к Car #1 в качестве механика, результирующие разрешения позволяют ей исправить только автомобиль №1.
  3. Если я предоставить пользователю Sarah доступ к Fleet # 2 с ролями Owner и Mechanic, она может добавлять и удалять автомобили флотов # 2, 4, 5 И она позволила исправить автомобилям # 1, 2, 3, 4, 5, 6.
  4. Если я предоставить пользователь Джереми доступ к флоту № 1 в качестве OwnerИ флота № 6 в качестве Driver, полученных разрешения позволяют ему добавлять и удалять автомобили всех флотов И драйва автомобилей # 7, 8. Он не может управлять любым другим автомобилем, кроме # 7 и 8.

Что такое хороший подход к этому разрешению объекта уровня?

Если это имеет значение, мы используем .NET 4.5.1 с EF6 Code First, построенный на основе ASP.net Boilerplate.

ответ

0

Мелкозернистые авторизации вы хотите реализовать напоминает мне о контроле доступа к объектам (АКОС - Что-то, что находится в розыске) и запрос объекты доступа (AROs - Что-то, что хочет что-то) в CakePHP's Access Control List (ACL) description с некоторыми вариациями:

Здесь это в двух словах:

У вас есть ACOs (Fleets and Cars), которые будут запрошены AROs (Владелец, Менеджер, Водитель, Механик). Если вы хотите узнать, имеет ли запросчик доступ к объекту, вы найдете путь к этому объекту (Can John access "Car #3"?: найдите путь «Автомобиль №3» от корня: Fleet #1 > Fleet #2 > Car #3), затем назначьте разрешение по умолчанию «Запретить» каждому узлу но переключите его на «Разрешить», если этот узел находится в списке разрешенных узлов реквестера. Если последний узел заканчивается «Разрешить», тогда ... разрешите, иначе отрицайте.

Понимание логики в первую очередь является ключевым. Выполнение на любом языке занимает второе место.

Надеюсь, он укажет вам в правильном направлении.

Cheers,