Myślę, że moje podejście byłoby podobne do użytkownika @ aitchnyu odpowiedź. Nie używałbym jednak indywidualnych użytkowników w metadanych. Jeśli utworzysz grupy dla każdego dokumentu, będziesz musiał rzadziej ponownie wyszukiwać ze względów bezpieczeństwa.
dla danego dokumentu, może mieć access_roles: group_1, group_3
W ten sposób group_1 i group_3 zawsze zachowują uprawnienia do dokumentu. Mogę jednak zmieniać grupy, do których należy każdy użytkownik i odpowiednio dostosowywać zapytanie.
Gdy zapytanie jest generowane, zawsze przekazuje jako część zapytania grupy użytkowników. Jeśli należę group_1 i group_2, moja kwerenda będzie wyglądać następująco:
q=mainquery
&fq=access_roles:group_1
&fq=access_roles:group_2
Ponieważ grupy są generowane dynamicznie w zapytaniu, po prostu usunąć użytkownika z grupy, a kiedy nowe zapytanie zostało wydane, oni nie będzie już zawierać usuniętej grupy w zapytaniu. Więc usunięcie użytkownika z group_1 będzie nowy utworzyć kwerendę tak:
q=mainquery
&fq=access_roles:group_2
Wszystkie dokumenty, które wymagają grupy 1 nie będą już dostępne dla użytkownika.
To pozwala większość zmian zrobić w czasie rzeczywistym bez konieczności ponownego indeksowania dokumentów. Jedynym powodem, dla którego należy ponownie wykonać reindeks ze względów bezpieczeństwa, jest decyzja, że dana grupa nie powinna już mieć dostępu do dokumentu.
W wielu rzeczywistych scenariuszach powinno to być stosunkowo rzadkie zjawisko. Wydaje się znacznie bardziej prawdopodobne, że dokumenty HR będą zawsze dostępne dla działu HR, jednak określony użytkownik może nie zawsze być częścią grupy HR.
Nadzieję, że pomaga.
Podejście to oznacza, że muszę ponownie wyindeksować, gdy zmieni się rola dostępu, prawda? Wszelkie środki, aby tego uniknąć? – Manny
Musisz ponownie zindeksować, gdy chcesz zmienić rolę dostępu ** dokumentów **, jaki rodzaj roli dostępu może uzyskać dostęp do dokumentu. Jest to ** zapytanie **, które różni się dla każdego użytkownika. – aitchnyu
edytowane w celu uwzględnienia tego – aitchnyu