2016-11-01 5 views
2

Wir versuchen, unsere benutzerdefinierte Wissensdatenbank um Volltext-Suchfunktionen mit Lucene bzw. Solr zu erweitern. Wir beschränken derzeit, was ein Benutzer mit einem rollenbasierten Modell sehen kann. So gibt es eine Reihe von Rollen an jedem Artikel und wenn ein Benutzer auch Mitglied einer dieser Rollen ist, kann er den Artikel sehen.Lucene-Indexierung mit eingeschränktem Benutzerzugriff

Also natürlich sollte die Suche nur Ergebnisse zurückgeben, auf die der Benutzer Zugriff hat.

Ich bin ein bisschen fest, wo ich anfangen oder wie dies zu tun ist. Muss ich die Ergebnisse später filtern? Erstelle ich einen rollenbasierten Index?

Es würde sehr geschätzt werden, wenn jemand mich in die richtige Richtung zeigen kann.

Danke. Stephanie.

Antwort

1

Ich würde empfehlen, die Zugriffsrollen als Metadaten zu speichern. Lassen Sie definieren access_roles ist in der Lage zu mehrwertigen Zeichenfolge Feld.

access_roles:[user, admin] // Users and the Admin roles can access this search. 
access_roles:[user, admin, anonymous] // Users and the Admin and Anonymous roles can access this search. 

Sie sollten Zugriffsrollen bearbeiten, wenn Sie Berechtigungen ändern möchten.

Wenn Benutzer Benutzerrollensuchen haben, ruft solr nur die Ergebnisse ab, die der Zugriffsrolle des Benutzers entsprechen.

Wenn Benutzer, haben (user) Rolle und auch (admin) Rolle sucht, ihn sucht gehen wie:

q=mainquery 
&fq=access_roles:user 
&fq=access_roles:admin 
&facet=on 
&facet.field=access_roles 

, die alle Ergebnis holt die user Rolle enthält ORadmin Rolle in access_roles;

Wenn Benutzer (user) Rolle, Mitglied eines Teams (it_department) Rolle sucht,

q=mainquery 
&fq=access_roles:user 
&fq=access_roles:it_department 
&facet=on 
&facet.field=access_roles 

die holt 'it_department' Dokumente auch

I Zulassungssystem für eine bessere

verstehen drawed haben

enter image description here

angepasst Abfragen von http://wiki.apache.org/solr/SimpleFacetParameters#Multi-Select_Faceting_and_LocalParams

+0

Hallo. Danke für deine Antwort. Zwei Fragen, obwohl. Erstens wäre es nicht ein bisschen gefährlich, nur Ergebnisse basierend auf der Abfrage einzuschränken? Wie ich es verstehe, könnte diese Abfrage vom Benutzer manipuliert werden. Zweitens haben wir die Zugriffsmethode als Schnittstelle implementiert, so dass andere Implementierungen unterschiedliche Funktionen/Methoden verwenden. Wie mir gerade gesagt wurde, haben wir eine Organisation, die zum Beispiel die Adresse verwendet, um den Zugang zu beschränken. Im Prinzip muss die access_method in Echtzeit pro Benutzersitzung zurückgehen. Vielen Dank. Stephanie – Stephanie

+0

Natürlich meine ich IP-Adresse NICHT oben Adresse. – Stephanie

+0

Ich dachte nicht, dass Ihre Solr-Abfrage direkt von den letzten Benutzern zugänglich ist. Ich dachte, Sie verwenden Web-Framework. Ich denke, Sie sollten Abfrage von Benutzer im Web-Projekt wie Spring mit Lucene Abfrage Parser nehmen. Dann sollten Sie einige Konstanten für implementierte access_roles definieren, die in der Lage sind, alle Zugriffsgruppen zu unterscheiden. Sie können Boolean nicht direkt verwenden. Sie sollten einen Indikator definieren, der benutzergruppenspezifisch implementiert ist.Und wenn die Zugriffsmethode wahr ist, sollten Sie access_role hinzufügen, um abzufragen, ob Benutzer zugängliche Controller-Methoden abfangen. Solr hat keine Berechtigung framewor –

Verwandte Themen