Node Access Problem
am 03.07.2010 - 10:42 Uhr in
Hallo Drupal Experten...
seit ein paar Tagen quäle ich mich mit einem Rechte-Problem herum.
Kurz geschildert:
UserA legt einen Beitrag an (node).
UserB antwortet auf diesen Beitrag.
Die Rechte sollen so verteilt werden:
den Beitrag von UserA dürfen alle lesen
den Beitrag von UserB dürfen nur UserA und UserB lesen.
Diese Konstellation ist auch nicht ungewöhnlich.
Praktisches Beispiel:
UserA bietet ein Haus an und beschreibt es in seinem Beitrag
UserB antwortet auf diesen Beitrag mit einem Angebot einer Kaufsumme und wie er das finanzieren möchte.
Der Beitrag von UserA ist natürlich öffentlich, aber der Beitrag von UserB sollte auf UserA und UserB beschränkt bleiben...
Natürlich soll diese Zuordnung der Rechte vollkommen im Hintergrund ablaufen, ohne das UserA bzw. UserB eine Benutzerreferenz eintragen muß.
Ich bin gespannt, ob es dafür eine akzeptable Lösung gibt :-)
Ich würde mich über ein Feedback sehr freuen...
- Anmelden oder Registrieren um Kommentare zu schreiben
Den Fall hatte ich jetzt
am 03.07.2010 - 12:27 Uhr
Den Fall hatte ich jetzt konkret noch nicht aber warum nicht
Private Message?
Oder sonst lässt sich das wahrscheinlich auch mittels Rules lösen
-----------
Luca Curella
Kooperative Netze - Berlin
Zitat: Oder sonst lässt sich
am 03.07.2010 - 12:31 Uhr
Oder sonst lässt sich das wahrscheinlich auch mittels Rules lösen
Das wäre aber - soweit ich weiß - nur möglich, wenn die Antworten auf den Beitrag von User A ebenfalls Nodes sind. Dann wäre das alles gar kein Problem. Wenn die Antworten allerdings Kommentare sind, sieht die Sache schon anders aus, denn ich glaube, dass das Zugriffs- und Grant-System nur für Nodes greift, nicht für Kommentare. Wer den Node sehen darf, der darf entweder alle oder gar keine Kommentare dazu sehen (glaube ich).
Wie genau geht denn die Antwort vonstatten?
die Beiträge von UserB sind
am 03.07.2010 - 13:31 Uhr
die Beiträge von UserB sind in der Tat auch nodes....
ich habe das rules - Modul jetzt installiert... mir ist aber noch nicht klar, wie ich damit zum Ziel komme....
Ich mache es noch etwas konkreter, vielleicht sehe ich auch nur den Wald vor lauter Bäumen nicht...
UserA schreibt einen Beitrag (node, eigener Inhaltstyp)
UserB "antwortet" darauf (kein Kommentar, sondern wieder mit einer Node, noch ein weiterer Inhaltstyp, unterschiedlich von dem Inhaltstyp von UserA).
Damit eine Zuordnung des Beitrags von UserA zu dem Beitrag von UserB möglich ist, wird beim Antworten eine Beitragsreferenz übergeben.
Per Views kann ich dann zu einem Beitrag von UserA alle "Antworten" der anderen User, insbesondere die von UserB anzeigen lassen.
Soweit bin ich jetzt....
und jetzt kommen irgendwie die Rules ins Spiel, aber ich weiß noch nicht genau wie...
Drupal Video-Tutorials
Ist eigentlich kein Problem
am 03.07.2010 - 14:24 Uhr
Ist eigentlich kein Problem mit Rules. Welches Modul für die Zugriffsbeschränkung verwendest du? Node Access oder Content Access oder was anderes?
Die folgende Beschreibung funktioniert auf jeden Fall mit Content Access, für Node Access weiß ich nicht, weil ich das nicht benutze.
Außerdem benötigt man noch das Modul ACL, um den Zugriff pro User und pro Node zu regulieren.
Wenn man Content Access installiert hat, ruft man die Konfigurationsseite von Inhaltstyp B (Inhaltstyp für Antworten) auf, dort steht oben ein neuer Reiter "Access Control", den ruft man auf. Dort setzt man jetzt die Lese-, Schreib- und Lösch-Rechte so, dass die User nur ihre eigenen Inhalte sehen, bearbeiten und löschen dürfen. Außerdem muss man den Usern erlauben, Nodes vom Typ B zu erstellen, das macht man allerdings bei den normalen Drupal-Berechtigungen.
Zuletzt muss man bei "Access Control" noch etwas runter scrollen, dort findet man noch den Punkt "Einstellungen für Zugriffskontrolle pro einzelnem Inhalt (node)", dort drauf klicken, einen Haken in die Checkbox setzen und speichern.
Zuletzt muss man noch das Modul Token installieren. Das war die Vorbereitung.
Nun erstellt man mit Rules eine neue Regel, welche auslöst, wenn ein neuer Inhalt gespeichert wird. Als Bedingung fügt man noch hinzu, dass der Inhalt vom Typ B sein muss.
Jetzt benötigt man drei Aktionen in dieser Reihenfolge:
(vor der Aktion steht immer die "Gruppe", zu der die Aktion gehört. Diese Gruppen werden bei der Liste der Rules-Aktionen fett hervorgehoben und die Aktionen stehen eingerückt darunter)
So, etwas detailierter:
Zuerst lädst du den referenzierten Beitrag. Dazu wählst du die entsprechende Option und auf der nächsten Seite kannst du wählen, welcher Beitrag das Referenz-Feld enthält (dort sollte "Inhalt erstellt" stehen) und wählst das Nodereference-Feld aus. Weiter unten kann man noch die in Rules zu verwendente Bezeichnung für diesen Beitrag festlegen, standardmäßig steht dort bei "Bezeichnung" "Referenzierter Inhalt" und bei "maschinenlesbarer Name" steht "referenced_node". Diese Dinge kannst du aber so lassen, wie sie sind. Speichern und fertig ist die erste Aktion.
Nun kommt die Aktion "Benutzerkonto laden". Wieder Aktion auswählen und auf die nächste Seite gehen. Dort kannst du den Benutzer entweder anhand des Benutzernamens oder anhand der User-ID laden, wir nehmen die User-ID. Durch das Modul Token hast du weiter oben den Punkt "Token-Ersetzungmuster", wenn du dort drauf klickst, öffnet sich eine Box mit weiteren Punkten, z.B. "Ersetzungsmuster für Inhalt erstellt" usw. Unter anderem dürfte dort auch "Ersetzungsmuster für Referenzierter Inhalt" stehen, dort klickst du drauf und es öffnet sich eine Box, welche alle Token-Ersetzungen auflistet.
Zur kurzen Erklärung: Wenn man irgendwo in Rules eine solche (gültige) Token-Ersetzung benutzt, wird diese bei der Regel-Ausführung durch den entsprechenden Wert ersetzt, den sie symbolisiert.
Also suchst du dir in der Box mit den Ersetzungen für "Referenzierter Inhalt" den Punkt "Benutzer-ID des Beitragerstellers" und kopierst dir die Token-Ersetzung, die davor steht. Standardmäßig müsste diese "[referenced_node:author-uid]" lauten. Diese Token-Ersetzung fügst du nun bei der Benutzer-ID für den zu ladenden Benutzer ein. Auch hier kannst du unten wieder die Bezeichnung ändern.
Speichern und fertig ist die zweite Aktion.
Die dritte und letzte Aktion ist ganz einfach:
Du wählst als Aktion "Gewähre Zugriffsrechte für einen Nutzer". Auf der nächsten Seite kannst du den Benutzer wählen, dem die Rechte erteilt werden sollen und den Inhalt, für den die Rechte erteilt werden.
Beim Inhalt wählst du "Inhalt erstellt" aus, sodass die Rechte für den neu erstellten Inhalt vom Typ B gelten.
Beim Benutzer wählst du "Geladener Benutzer" aus. Somit werden dem Autor von Node A die Rechte erteilt.
Speichern - fertig.
Damit sehen am Ende die Rechte so aus, dass die Leute nur Ihre eigenen Inhalte vom Typ B sehen können. Außerdem können aber die Autoren vom zugehörigen Node vom Typ A den Inhalt ebenfalls sehen.
Dürfte also genau den Zweck erfüllen, den du suchst.
Keine Sorge, das sieht zwar nach viel aus, ist aber eine Sache von 10 bis 20 Minuten.
erst einmal vielen Dank für
am 03.07.2010 - 17:32 Uhr
erst einmal vielen Dank für deine ausführliche Anleitung.
ich werde mir das mal genau durchlesen und hoffe, dass ich damit mein Ziel erreichen kann.
aber heute wird erst einmal gefeiert.....
Deutschland ist im Halbfinale :-)
Drupal Video-Tutorials
Oh ja, da hatten die Jungs
am 03.07.2010 - 17:40 Uhr
Oh ja, da hatten die Jungs von Maradona nichts zu lachen ;-) war ein gigantisches Spiel.
Ich habe alles nach deinen
am 04.07.2010 - 14:35 Uhr
Ich habe alles nach deinen Anweisungen durchgeführt und ich muß sagen, es funktioniert genau so, wie ich mir das vorgestellt habe.
Wenn man sich ein bißchen damit beschäfitgt, ist die Logik, die dahintersteht auch gar nicht so schwer zu durchschauen....
super Tipp, der hat mir richtig weitergeholfen
Drupal Video-Tutorials
@Exterior
am 04.07.2010 - 20:10 Uhr
Super Anleitung!
Hast du nicht Lust eine Handbuchseite daraus zu machen?
-----------
Luca Curella
Kooperative Netze - Berlin
Danke :-)Kann ich mal
am 04.07.2010 - 23:49 Uhr
Danke :-)
Kann ich mal machen, aber heute nicht mehr ^^ Als ich letztens mal spontan beschlossen habe, eine Handbuchseite zum WYSIWYG-Modul zu schreiben, ist daraus eine stundenlange Aktion geworden, wenn ich einmal drin komme ich immer vom hundersten ins tausendste ^^ Aber vielleicht mach ich das demnächst mal ;-)
Aber was nimmt man da konkret als Thema? Vorschlag für ne Überschrift? Dann kann ich mich morgen mal ran setzen ^^
Edit:
Habe mir gerade überlegt, dass ich auch gleich ne etwas umfangreichere Handbuchseite allgemein zum Thema spezielle Zugriffsrechte machen kann, werde ich morgen oder übermorgen mal reinstellen.