[gelöst] bestimmten Nutzern direkt spezifischen Seitenzugriff (edit, nicht Erstellung oder löschen) erteilen
am 12.01.2011 - 20:32 Uhr in
Hi, ich hoffe, der Titel ist verständlich.
Ich bastle gerade an einer Homepage für die studentischen Gremien meiner Uni. Dadurch werde ich viele verschiedene Nutzer haben, die jeweils nur einen sehr beschränkten Seitenzugriff erhalten sollen.
Konkret soll so bspw. der User Fachbereich X die Seiten Aktuelles und Termine erhalten, aber auch nur diese Seiten editieren können. Auf andere Fachbereichsseiten soll X keinen Zugriff haben, selbst wenn diese den gleichen Inhaltstypen haben.
Gibt es dafür eine gute Modul-Lösung bzw. einen Weg, die integrierten Drupal-Funktionen zu nutzen?
Ich will dabei keine Bearbeitung des Codes vornehmen, da ich die Seite so aufbauen will, dass die auch relativ problemlos von Laien gepflegt werden kann. Dementsprechend wäre eine fertige Modul-Lösung, die dann hoffentlich auch aktuell gehalten wird, die beste Lösung. Solche Lösungen würden also nicht in Frage kommen, selbst wenn sie helfen würden.
Auch würde ich nur ungerne extra erst eigene Seitentypen und Rollen erstellen wollen, da das so auch schnell in der Verwaltung unübersichtlich wird, da ich alleine für die Fachbereiche knapp 30 unterschiedliche Benutzer, Rollen und Seitentypen hätte.
Die Module, die ich bisher gefunden habe, waren entweder auf Rollen-Basis oder schienen nur Einfluss darauf zu nehmen, ob eine Seite angezeigt wird, oder nicht. Bei Modulen wie Content Access wäre es z.B. scheinbar auch nötig, erst eigene Inhaltstypen zu erstellen, bevor ich die Nutzer (bzw. bei diesem Modul Rollen) einen Zugriff geben könnte.
Falls meine Beschreibung noch zu unklar sein sollte, einfach kurz melden, dann versuche ich das noch anders zu erläutern.
Danke schon mal für eure Antworten
- Anmelden oder Registrieren um Kommentare zu schreiben
nodeaccess & co.
am 12.01.2011 - 20:45 Uhr
Hallo.
...Konkret soll so bspw. der User Fachbereich X die Seiten Aktuelles und Termine erhalten, aber auch nur diese Seiten editieren können. Auf andere Fachbereichsseiten soll X keinen Zugriff haben, selbst wenn diese den gleichen Inhaltstypen haben.
Gibt es dafür eine gute Modul-Lösung bzw. einen Weg, die integrierten Drupal-Funktionen zu nutzen?
Ich habe neulich für eines unserer Projekte eine Erweiterung für [do:nodeaccess_userreference Node access user reference] und [do:nodeaccess_autoreference Node access auto reference] geschrieben, mit dem man soetwas umsetzen kann. Das Modul ist zwar generisch aufgebaut, wird jedoch in näherer Zukunft nicht auf drupal.org als Release erscheinen.
Alternativ könntest Du Dir mal [do:og Organic Groups] anschauen. Das ist zwar deutlich umfangreicher, bietet jedoch ebensolche Funktionalität.
Auch würde ich nur ungerne extra erst eigene Seitentypen und Rollen erstellen wollen
Ähm, aber genau darauf beruht ja auch die Zugriffssteuerung. Oder willst Du Aktuelles und Termine als "statische" Seiten erstellen? Das würde dem Konzept von Drupal ziemlich stark wiedersprechen.
Und über Rollen regelt man für gewöhnlich bei Drupal die Berechtigungen.
Beispiel: die Rolle "news editor" bekommt die Berechtigung, Inhalte vom Typ "news" anzulegen und eigene Inhalte des Typs auch zu bearbeiten (einfaches Berechtigungsbeispiel, das sich jedoch mit den oben genannten Modulen deutlich feingranularer gestalten lässt). Somit erhalten alle Benutzer, die diese Rolle zugeordnet bekommen haben, ebenfalls diese Berechtigung.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
stBorchert schrieb Alternativ
am 12.01.2011 - 21:38 Uhr
Alternativ könntest Du Dir mal [do:og Organic Groups] anschauen. Das ist zwar deutlich umfangreicher, bietet jedoch ebensolche Funktionalität.
Danke, ich werde mir das mal genauer anschauen. :)
Ähm, aber genau darauf beruht ja auch die Zugriffssteuerung. Oder willst Du Aktuelles und Termine als "statische" Seiten erstellen? Das würde dem Konzept von Drupal ziemlich stark wiedersprechen.
Und über Rollen regelt man für gewöhnlich bei Drupal die Berechtigungen.
Ich sehe schon ... warum auf Zwang eine andere Lösung haben wollen, wenn schon eine existiert, die von Haus aus dafür vorgesehen ist. Ist ja auch logisch, dass im Normalfall eine Berechtigungssteuerung nach Rollen mehr Sinn ergibt, als nach Nutzern. Dann werde ich mich dem einfach beugen und das Beste draus machen. ^^
Und zu deiner Frage: Ja und nein. Viele Seiten werden statisch sein, weil diese in erster Linie als Informationsträger genutzt werden. Es werden aber auch nicht-statische Seiten dabei sein.
Edit: und überhaupt erst mal danke für diese gute und schnelle Antwort. ^^
Du könntest dir auch mal das
am 12.01.2011 - 22:41 Uhr
Du könntest dir auch mal das hier anschauen:
Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
Und etwas genauer noch das hier:
Ich will es ganz genau - Zugriffsrechte für einzelne User
Die Möglichkeit hatte ich
am 12.01.2011 - 23:22 Uhr
Die Möglichkeit hatte ich auch schon gefunden, aber bisher ausgeschlossen, weil ich ja eigentlich eine andere Lösung anstrebte. Wenn ich aber mit Rollen arbeite, wird das sicherlich sehr hilfreich sein. :)
Thx für die Links
Aber mit
am 12.01.2011 - 23:38 Uhr
Aber mit http://www.drupalcenter.de/handbuch/28798 kannst du doch einfach bei jedem Node die Mitglieder einzeln auswählen, die Zugriffsrechte erhalten sollen. Oder habe ich da bei deiner Frage etwas falsch verstanden?
Kann gut sein. Allerdings
am 13.01.2011 - 08:30 Uhr
Kann gut sein. Allerdings wird mir aus dem Text noch nicht ganz klar, was ich dafür alles erstellen muss, also ob ich z.B. immer noch für jede Gruppe einen einzelnen Inhaltstypen erstellen muss oder ob ich nur einmal einen Inhaltstypen mit dem Referenzfeld erstelle, und dann schon indidivuell auswählen kann (Auszug aus deinem Link: "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.").
Aber wie es scheint hast du recht, was die User-Berechtigung angeht ("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.")
Ich werde das mal ausprobieren, wenn stabile Versionen der Module raus sind. Sehe ich das richtig, dass References die Fortführung von Node Access ist oder muss References nur zusätzlich installiert sein, damit Node Access läuft. Das ist mir aus der Beschreibung nicht ganz klar geworden
Zitat: wenn stabile Versionen
am 13.01.2011 - 16:07 Uhr
wenn stabile Versionen der Module raus sind
Davon gibt's doch stabile Versionen. CCK, Node Access Userreference und Content Access liegen alle als stable release vor. Oder redest du hier von Drupal 7? Denn dafür kann man die Anleitung vermutlich nicht einfach umsetzen.
Sehe ich das richtig, dass References die Fortführung von Node Access ist oder muss References nur zusätzlich installiert sein, damit Node Access läuft.
Nein, ganz falsch. Erstmal ist in dem Text nicht von Node Access die Rede, sondern von Node Access User reference, das sind zwei völlig verschiedene Dinge.
Mit Node Access kannst du - ähnlich wie mit dem Modul Content Access - Zugriffs-Einstellungen für ganze Inhaltstypen auf Basis von Benutzerrollen festlegen.
Mit Node Access User reference kannst du bei der Erstellung einzelner Nodes über ein UserReference-Feld (CCK Core) festlegen, welche Benutzer den Node sehen / bearbeiten / löschen dürfen.
Das Modul References hat mit alledem gar nichts zu tun, dass ist ein Modul, welches nur für Drupal 7 existiert, um dort UserReference- und NodeReference-Felder zu verwenden (da große Teile von CCK in den Drupal-Core eingegliedert wurden).
Kann gut sein. Allerdings wird mir aus dem Text noch nicht ganz klar, was ich dafür alles erstellen muss, also ob ich z.B. immer noch für jede Gruppe einen einzelnen Inhaltstypen erstellen muss oder ob ich nur einmal einen Inhaltstypen mit dem Referenzfeld erstelle, und dann schon indidivuell auswählen kann
Du nimmst einen x-beliebigen Inhaltstyp, welcher das ist, ist völlig egal. Entweder, du legst einen neuen an oder du verwendest einen der vorhandenen. Für diesen Inhaltstyp legst du nun ein UserReference-Feld mit CCK an. Dort musst du zwar auswählen, aus welchen Rollen referenziert werden kann, aber wenn man da "authenticated user" wählt, dann stehen in diesem Feld immer alle Benutzer der Website zur Verfügung.
Dann wählt man bei den Einstellungen dieses Feldes noch, ob und welche Node Access User Reference-Einstellungen mit diesem Feld getroffen werden sollen. Und das war's auch schon, jetzt kann man einen Node dieses Typs erstellen, wählt die entsprechenden Benutzer aus und dann haben nur diese Benutzer die vorher definierten Zugriffsrechte.
oder ob ich nur einmal einen Inhaltstypen mit dem Referenzfeld erstelle, und dann schon indidivuell auswählen kann
Genau das ist dann der Fall.
Jepp, meinte Drupal7. Hätte
am 13.01.2011 - 17:16 Uhr
Jepp, meinte Drupal7. Hätte ich dazu schreiben müssen.
Danke für die Klarstellung. :) Ich werde das demnächst mal ausprobieren. Da ich leider noch nicht genau weiß, wann ich in den nächsten Tagen dazu Zeit finden werde, kann es etwas dauern. Ich melde mich aber wieder, sobald es geklappt hat.
Tolles Forum hier, werde versuchen, mich hier nach Möglichkeit auch stärker zu beteiligen. :)
Hi, soweit klappt jetzt schon
am 14.01.2011 - 22:44 Uhr
Hi, soweit klappt jetzt schon mal alles mit Reference und Node Access User reference. Allerdings habe ich jetzt noch das Problem, dass die Ansicht der Seiten für alle anderen gesperrt ist. Wenn ich "Grant view node access to user" auswählen würde, würde das ja nur für die ausgewählten Nutzer gelten. Und die allgemeine Berechtigungs-Einstellung "Veröffentlichten Inhalt anzeigen" wird ja scheinbar überschrieben bzw. ignoriert.
Wie kann ich also userspezifisch edit-Fähigkeiten ausgeben (was ja schon klappt) und trotzdem allgemein die Ansicht erlauben.
Aber danke schon mal soweit.
Dafür bräuchtest du wohl noch
am 15.01.2011 - 00:25 Uhr
Dafür bräuchtest du wohl noch ein Modul wie Content Access oder Node Access, allerdings gibt's die anscheinend noch nicht für Drupal 7.
Du kannst höchstens mal schauen, ob hier was für dich dabei ist:
http://drupal.org/node/690610
Vielleicht ist auch Flexi Access etwas für dich:
http://drupal.org/project/flexiaccess
Um eines vorweg zu nehmen:
am 16.01.2011 - 15:02 Uhr
Um eines vorweg zu nehmen: das eigentliche Problem konnte ich mit Hilfe von Exterior lösen.
In Drupal7 kann man mit References und der integrierten "Field"-Funktion (ehemals Bestandteil von CCK, wenn ich mich nicht irre) bei den Inhaltstypen ein Feld "User Reference" hinzufügen. Bei der Erstellung einer neuen Seite kann man dann auswählen, wer Zugriff auf die Seite haben soll und wer nicht. Genauer beschrieben kann man das weiter oben in einem Beitrag von Exterior nachlesen.
Mein Problem war allerdings noch, dass ich die Seite unabhängig davon nicht einfach für alle (auch Gäste) zur Ansicht freigeben konnte. Die Freigabe über References gilt immer nur für authorisierte Nutzer. Eine mögliche Lösung hat Exterior mit FlexiAccess noch genannt, die ich allerdings nicht mehr weiter ausprobiert habe.
Da von Reference allerdings bisher keine stabile Version raus ist und ich möglicherweise dazu noch weitere Module hinzufügen müsste, nutze ich jetzt die integrierten Funktionen von Drupal. Wie auch schon von stBorchert angemerkt, werde ich einfach entsprechend (viele) Rollen und Inhaltstypen erstellen und die Standardberechtigungsfunktion benutzen. So habe ich zwar nachher eine unübersichtliche Rollenübersicht und muss auch viele Inhaltstypen erstellen, allerdings bin ich so nicht davon abhängig, dass die verschiedenen nötigen Module auch weiterentwickelt werden.
Wer allerdings Seiten erstellen will, die nur für bestimmte angemeldet User zu sehen sind, sollte References mal ausprobieren. Laut Entwickler könnte es Ende Januar auch eine Weiterentwicklung geben
A code sprint around References will take place at DrupalCamp Nantes on 2011/01/30, focused on building tests for the existing code and reviewing existing patches. All hands welcome !
Da meine eigentliche Frage also gelöst wurde, setze ich den Thread hier auch auf [gelöst]