Фильтрация коллекций на основе разрешения

Допустим, есть ресурсы, такие как файлы. Кто, когда, где имеет доступ к отдельному файлу - не проблема. Предположим, что существует такой ресурс, как каталог, который имеет свои собственные атрибуты и содержит другие файлы, каталоги и / или некоторые другие элементы. Теперь есть пользователь, который имеет доступ к каталогу, но не имеет доступа (даже для просмотра имени / заголовка) к некоторым файлам или поддиректориям.

Как отфильтровать каталог, чтобы он содержал только те файлы, к которым пользователь может получить доступ, если решение о политике отделено от бизнес-логики. Должен ли я проверять каждый файл в отдельности?

Если да, то если каталог содержит 10M файлов и пользователь имеет доступ только к нескольким файлам, как определить эти файлы?

1 ответ

Решение

Прежде всего, вы должны решить, что это за ресурс: это папка, файл? Файл из абстрактного смысла (имеется в виду и папка и файл)? Это тот случай, когда вы можете просматривать файл тогда и только тогда, когда вы можете просматривать его предков? Другими словами, существует иерархия.

Если оставить в стороне эти вопросы, есть два подхода к управлению доступом к большому набору данных:

  1. Используйте Multiple Decision Profile для создания запроса авторизации для нескольких элементов. Запрос Multiple Decision Profile (MDP) будет выглядеть так: может ли Алиса просматривать файлы A и B, C и... Z? НДП ответит с таким количеством решений, сколько было пунктов в первоначальном вопросе. MDP хорошо работает с предметами в тысячах или меньше.
  2. В случае, если у вас очень большое количество элементов или неизвестное количество элементов, вы можете запустить обратный процесс, называемый обратным запросом (ARQ), в котором вместо того, чтобы задавать вопрос "да / нет", вы задаете открытый вопрос, например, " Рассказать". мне, какие файлы Алиса может просматривать. PDP ответит выражением фильтра, например, Permit if docStatus == draft AND docDept = Sales. Затем вы должны были бы PEP преобразовать фильтр в адекватный фильтр, например, фильтр файлов.
Другие вопросы по тегам