Ich will es ganz genau - Zugriffsrechte für einzelne User
Auf dieser Seite wird erklärt, wie man beim Erstellen eines Nodes einzelnen Usern Zugriffsrechte geben kann
Mit der Möglichkeit, bei der Node-Erstellung Rollen für die Zugriffsrechte auszuwählen, ist man schon recht flexibel.
Aber es kann auch vorkommen, dass man nur einem betimmten User (oder auch mehreren bestimmten Usern) Zugriffsrechte geben möchte, ohne sie gleich einer ganzen Benutzerrolle zu erteilen. Wenn man z.B. die Zugriffsrechte einem Verwalter, einem Ausbilder und einem Vorstands-Mitglied erteilen möchte, kommt man mit der Rollen-Auswahl nicht weiter, da muss etwas feineres her:
Die Module
Obwohl diese Aufgabe komplexer erscheint, benötigen wir im Grunde nur zwei Module zwingend:
CCK bringt uns das benötigte User-Reference-Feld, welches sich dann mit Node Access User Reference ergänzen lässt.
Allerdings kann man auch hier parallel Content Access einsetzen (und das sollte man auch). Die Zugriffsrechte des User-Reference-Feldes wirken dann ergänzend zu den Einstellungen von Content Access. Man kann es also so einstellen, dass standardmäßig Verwalter alle Inhalte vom Typ "Test-Typ" sehen können. Nun wählt man beim Erstellen des Nodes noch die Ausbilder "User A" und "User B" aus und dann können alle Verwalter und die User A und B den Node sehen, sonst niemand. Wenn man beim User-Reference-Feld niemanden auswählt, gelten ganz normal die Einstellungen von Content Access.
Da ich vor habe, die User-Reference über Checkboxen zu realisieren, hier noch ein kleiner Tipp für alle, die auch Checkboxen (oder Radiobuttons) nehmen wollen:
Ein User-Reference-Feld hat meistens viele Werte. Wenn man z.B. 60 User auf seiner Seite hätte, dann hätte das User-Reference-Feld 60 Zeilen mit Checkboxen --> ziemlich unübersichtlich.
Dafür kann man dann das Modul "Multi-column checkboxes radios" verwenden. Damit kann man bei Feldern, die Checkboxen oder Radiobuttons verwenden, eine Spaltenzahl festlegen.
Somit kann man aus den 60 Zeilen 15 Zeilen zu je 4 Spalten oder auch 12 Zeilen zu je 5 Spalten machen usw. Damit wird die Sache wesentlich übersichtlicher und schöner zu bedienen.
Außerdem ist das Modul auch für Leute sinnvoll, die über Drupals Form API selbst Formulare einbinden wollen, denn das Modul stellt eine neue '#multicolumn'-property zur verfügung, mit der man auch seine eigenen Checkboxen ganz einfach in Spalten aufteilen kann.
Aber zurück zum Thema:
Zum Zeitpunkt des Verfassens dieser Buchseiten werden folgende Versionen benutzt:
Drupal --> 6.17 (deutsche Version von DC)
CCK --> 6.x-2.7
Node Access User Reference --> 6.x-2.6
Content Access --> 6.x-1.2
Multi-column checkboxes radios --> 6.x-1.4
Vorbereitung und Installation
Und wieder eine einfache Sache --> Module herunterladen, entpacken, nach sites/all/modules hochladen und aktivieren.
Inhaltstyp anpassen
Für die Zugriffsbeschränkung für einzelne User müssen wir nur ein User-Reference-Feld zu unserem Inhaltstyp (ich nenne ihn hier wieder "Test-Typ") hinzufügen.
Also rufen wir admin/content/types auf, suchen uns unseren Inhaltstyp und klicken auf "Felder verwalten".
Wie immer sind Bezeichnung und Feldname euch überlassen. Ich nehme als Bezeichnung "Sichtbarkeit für User" und als Feldname "field_user_access".
Als Datentyp nehmen wir Benutzerreferenz bzw. Userreference und als Darstellung nehme ich wieder "Ankreuzfelder / Auswahlknöpfe". Ich finde Checkboxen für so eine Aufgabe einfach am praktischsten, aber es funktioniert natürlich auch mit den anderen Darstellungs-Arten.
Speichern und weiter zur nächsten Seite.
Auch hier gilt: Hilfe-Text, Standardwert, Anzahl der Werte und erforderlich oder nicht --> alles euch überlassen.
Etwas weiter oben findet ihr die Einstellungen für die Spaltenzahl (wenn ihr das Multi-Column-Modul installiert habt), auch da könnt ihr einstellen, was ihr wollt und was euch am ehesten zusagt.
Wichtig ist hauptsächlich der Teil mit den Berechtigungen:
--> Grant "view" node access to user
--> Grant "edit" node access to user
--> Grant "delete" node access to user
Hier verhält es sich genauso wie beim Role-Reference-Feld: Pro User-Reference-Feld könnt ihr nur einen Berechtigungs-Satz speichern. Dass heißt, alle dort ausgewählten Benutzer bekommen die hier eingestellten Berechtigungen erteilt. Wenn man unterschiedlichen Benutzern unterschiedliche Rechte zuweisen möchte, benötigt man ein weiteres User-Reference-Feld, evtl. 3. Für nähere Erläuterungen diesbezüglich lest euch bitte den Zusatz bei "Praktischer: dynamische rollenbasierte Zugriffe" durch, dort wird kurz näher auf diese Sache eingegangen.
Ich nehme folgende Einstellungen:
nicht erforderlich --> da diese Einstellung bei mir ergänzend zu Content Access eingesetzt wird
Anzahl der Werte: unbegrenzt --> ich möchte gern so viele User auswählen, wie ich möchte.
Spalten: 4 --> Sieht recht übersichtlich aus.
Grant "view" node access to user --> ich möchte, dass die gewählten User den Node sehen können, mehr nicht
Weiter unten kann man auswählen, aus welchen Benutzerrollen die User referenziert werden können. Wenn man also nur Verwalter zur Auswahl haben möchte, wählt man die Rolle "Verwalter" aus. Wenn man gar nichts auswählt, werden alle Benutzer angezeigt.
Ich musste allerdings feststellen, dass mir die Standard-Ansicht von User-Reference nicht sonderlich gefällt. Es werden dann eben hinter den Checkboxen die User-Namen angezeigt. Mag für den einen oder anderen sinnvoll oder egal sein, aber bei mir hat jeder User zwei Profil-Felder: Vorname und Nachname. Und weil auch Leute die Nodes erstellen sollten, die mit den Benutzernamen nichts anfangen können, aber mit Vor- und Nachname schon, wollte ich, dass dort die Profilfelder ausgegeben werden, anstatt der Benutzernamen.
Für alle, die das auch wollen, hier ein kleiner Abstecher in Richtung Views:
Denn wie beim Role-Reference-Feld kann man die Standard-Ausgabe von User-Reference überschreiben und stattdessen eine View ausgeben.
Dazu erstellen wir eine View und wählen als View-Type "Benutzer" bzw. "User" aus.
Die Basis-Einstellungen lassen wir vorerst alle so, wie sie sind.
Als Felder fügen wir jetzt die gewünschten Profil-Felder hinzu, z.B. "profile_vorname" und "profile_nachname". Damit würden die Profil-Felder ausgegeben, allerdings werden automatisch auch noch die Benutzernamen der User mit angezeigt. Wenn man das nicht will, fügt man zusätzlich zu den Profil-Feldern noch ein Feld mit dem Benutzer-Namen ein (also "Benutzer: Name") und setzt dort einen Haken bei "Von der Anzeige ausschließen", dann werden nur noch die gewünschten Felder angezeigt und der automatisch generierte Benutzername verschwindet.
Allerdings sieht das ganze dan bei User-Reference immer noch nicht so richtig schön aus, weil User-Reference einen eigenen Standard-Separator einfügt, nämlich ein Minus ( '-' ). Das heißt, wenn man für User-Reference eine View anzeigen lassen will, werden automatisch zwischen die einzelnen Felder diese Separatoren gesetzt, sodass dann in der Auswahl "Max-Muster" stünde. Aber auch das lässt sich leicht beheben:
Dazu schauen wir uns die Basis-Einstellungen an. Als Zeilendesign ist "Felder" eingestellt. Hinter Felder ist ein kleines Zahnrad, da klicken wir drauf.
Nun können wir ein paar Einstellungen tätigen. Zum einen wählen wir die Inline-Felder aus. Inline-Felder werden hintereinander ausgegeben (in der Reihenfolge, in der sie bei den Feldern stehen). Also wähle ich als Inline-Felder "profile_vorname" und "profile_nachname" aus. Das Benutzernamen-Feld kann man ignorieren, da es ohnehin nicht ausgegeben wird.
Außerdem klicken wir in das Text-Feld für "Separator". Der Standard-Separator von User-Reference wird nämlich nur gesetzt, wenn kein Separator vorgegeben wird. Hier kann man jetzt also eintragen, was man will. Ich habe einfach ein Leerzeichen rein gemacht, sodass dann "Max Muster" erscheint, so wie es soll.
Zu guter Letzt können wir das ganze noch sortieren, zum Beispiel nach "profile_nachname" oder der User-ID. Außerdem kann man bei "Filter" noch die Anzeige auf bestimmte Dinge begrenzen, z.B. dass nur User angezeigt werden, die einer bestimmten Rolle angehören und/oder nur aktive Benutzer ausgegeben werden usw.
Nun kann man die View speichern, eine Seitenansicht oder so wird nicht benötigt.
So, das war's zu der View, nochmal kurz zurück zum User-Reference-Feld:
Dort können wir nun ganz unten die View auswählen (es stehen nur Views vom Typ "Benutzer" zur Verfügung) oder man ist mit der Standard-Ausgabe zufrieden. Nun speichert man das ganze und ist fertig.
Wenn man jetzt einen Node vom Typ "Test-Typ" erstellt, kann man beliebige User auswählen und ihnen damit die entsprechenden Rechte zuweisen.
Tipps:
- Ich würde empfehlen, das User-Reference-Feld in eine CCK-Feldgruppe zu packen und diese auf "zusammenklappbar" zu stellen, am Besten standardmäßig geschlossen. Das macht das Node-Formular insgesamt übersichtlicher, denn sonst werden immer alle User angezeig. Bei entsprechend vielen Usern stört das evtl.
- Man sollte sich gründlich überlegen, ob man diesen Weg der Rechtevergabe gehen will. Bei kleinen Seiten mit 60, 100 oder von mir aus auch ein paar mehr Benutzern ist das sicher kein Problem. Aber wenn jemand das auf einer Seite mit 2.000 Benutzern einsetzen will, dann wünsche ich demjenigen viel Spaß, die einzelnen User zu suchen ;-) Es klingt zwar schön, die Zugriffe für einzelne User verteilen zu können, aber man muss sich immer überlegen, ob das ganze Sinn macht und praktikabel ist.
- Man kann diese Art der Rechtevergabe problemlos mit der Rollenauswahl aus "Praktischer - dynamische rollenbasierte Zugriffe" kombinieren. Die beiden Arten ergänzen sich dann. Man kann dann also bestimmte Rollen auswählen, die den Node sehen dürfen und zusätzlich noch einzelne User, die diesen Rollen nicht angehören.
Neue Kommentare
vor 2 Tagen 20 Stunden
vor 2 Tagen 23 Stunden
vor 2 Tagen 23 Stunden
vor 2 Tagen 23 Stunden
vor 3 Tagen 20 Stunden
vor 3 Tagen 22 Stunden
vor 4 Tagen 19 Stunden
vor 5 Tagen 12 Stunden
vor 5 Tagen 13 Stunden
vor 5 Tagen 16 Stunden