Zugriff auf Node
Eingetragen von TobiasR (134)
am 04.09.2009 - 18:35 Uhr in
am 04.09.2009 - 18:35 Uhr in
Hallo,
ich möchte ein Modul erstellen, mit dem ich den Zugriff auf bestimmte Nodes regulieren kann.
Stehe aber gerade ein wenig auf dem Schlauch, da ich nicht weiß an welchem Hook ich ansetzen soll. Ich hatte folgende Idee:
function modulname_node_access($op, $node, $account)
{
if ($node->type == 'xxx') //hier kommt noch eine Bedingung für den user hin
{
switch($op)
{
case 'update':
return true;
...
}
}
}
Leider funktioniert das so nicht. Setze ich am falschen Hook an oder mache ich da in der Funktion was falsch?
Viele Grüße,
Tobias
- Anmelden oder Registrieren um Kommentare zu schreiben
Selbst ist der Mann
am 04.09.2009 - 19:03 Uhr
Natürlich kannst du das selbst programmieren.
Oder du schaust dir Node Access an, das vermutlich schon genau das macht, was du brauchst.
Und falls Node Access dir doch nichts bringt, kannst du dir da zumindest abschauen, wie die es programmiert haben.
Hallo, das Node_Access-Modul
am 07.09.2009 - 00:11 Uhr
Hallo, das Node_Access-Modul ist nicht ganz das was ich suche. Eventuell bekomme ich das Problem mit ein paar anderen Node-Access-Modulen hin.
Trotzdem würde ich gerne verstehen, wie Drupal den Zugriff auf Nodes regelt. Insbesondere die Funktionsweise von hook_node_grants() und hook_node_access_records(), da man damit den Zugriff wohl wesentlich flexibler gestalten kann, als mit hook_access() und hook_perm().
Hier meine aktuelle Auffassung wie diese beiden Hooks funktionieren:
Erstellt in der Tabelle "node_access" Zugriffseinträge für jeden Node. Dort wird eine Grant-ID (also eine Rechte-ID) ein realm (also ein Bereich, z.B. Modulname, etc.) und verschiedene Zugriffe(view, update, delete). Es können pro Node also mehrere Einträge mit verschiedenen Grant-IDs und realms vorhanden sein.
Dieser Hook gibt ein Array mit Bereichen (die realms aus der Tabelle "node_access") als Schlüssel und Rechten (Grant-IDs) als Schlüssel wieder.
Ist das so richtig wiedergegeben? Würde mich über ein Feedback freuen, wenn's so richtig ist, oder verbessert wird, würde ich das ganze noch ein wenig ausarbeiten und ins HAndbuch übernehmen.
Viele Grüße,
Tobias
Zitat:ich möchte ein Modul
am 07.09.2009 - 00:38 Uhr
Willst Du das Fahrad noch mal erfinden?
Ein solches Modul existiert bereits. Es heisst "Content Access" und kann mit dem Modul "ACL" erweitert werden.
------------------------
Quiptime Group
Zitat: Willst Du das Fahrad
am 07.09.2009 - 00:53 Uhr
Willst Du das Fahrad noch mal erfinden?
Nein! Das möchte ich nicht. Mir ist klar, dass man möglichst immer auf schon vorhandene Module zurückgriefen sollte. Vielleicht schildere ich meine Anliegen etwas genauer. Habe lange gesucht, ob ich dies mit Standard-Modulen abdecken kann bin aber momentan noch der Meinung das es nicht möglich ist:
Ich möchte Nodes erstellen, die insgesamt über 4 Ebenen (Hierachie) verfügen. Diese Nodes werden jeweils von der nächst höheren Ebene erstellt und müssen von allen höheren Ebenen bearbeitbar/löschbar sein. Welcher User auf Nodes welcher Ebene Zugriff hat, löse ich z.Z. über ein CCK-Userreference-Feld (wofür es auch ein Access-Modul gibt). Für das Problem der Zugriffs auf eine tiefere Ebene (über mehrere Ebenen und mit verschiedenen Rechten) habe ich noch kein Modul gefunden.
Daher habe ich mich mit den Hooks aus dem Drupal-Kern beschäftigt. Ich habe auch schon eine Idee, ie ich dies damit umsetzen kann, jedoch habe ich dies noch nicht umgesetzt, weil ich ein Feedback haben wollte, ob ich die Funktionen so richtig verstanden habe.
Tobias
Hast Du meinen Post, Willst
am 07.09.2009 - 10:03 Uhr
Hast Du meinen Post, Willst Du das Fahrad noch mal erfinden?, ueberhaupt erfasst?
Das Modul heisst "Content Access" und nicht "Node Access".
Hast Du dieses Modul und seine Moeglichkeiten ueberhaupt getestet?
Um die einzelnen Hierachie-Stufen getrennt mit Rechten versehen zu koennen koennte man jede Hierachie-Stufe mit einem eigenen Nodetype erstellen.
------------------------
Quiptime Group
Natürlich habe ich diesen
am 07.09.2009 - 10:50 Uhr
Natürlich habe ich diesen Post gelesen. Getestet habe ich es nicht, ich habe mich auf die Beschreibung von drupal.org verlassen und bin zu dem Schluss gekommen, dass auch dieses Modul(wie viele andere) nicht das tut, was ich gerne hätte.
Auf der anderen Seite habe ich auch die Motivation mich genauer mit den Hooks des Drupal-Kerns auseinander zu setzen, da ein gewisses Grundverständnis in der Modulentwicklung sicher nicht schadet.
Daher möchte ich die "Fertige Module"-Diskussion hiermit beenden (mein Beitrag war bewusst im Forum "Modul-Entwicklung" und nicht in "Modul-Suche" eingestellt) und würde mich immer noch zu Rückmeldungen meiner Verständnisfragen freuen.
Viele Grüße,
Tobias
TobiasR schrieb Hier meine
am 07.09.2009 - 11:10 Uhr
Hier meine aktuelle Auffassung wie diese beiden Hooks funktionieren: ...
Ist soweit richtig. Zu bemerken ist noch
hook_node_access_records
neu aufgebaut wird.hook_node_grants
wandern direkt in eine(!) Datenbankabfrage, die jedes mal ausgeführt wird, wenn der Zugriff auf einen Node geprüft werden soll. Da ist es etwas unpraktisch, 20000 Datensätze zurückzuliefern. Den Parameter$op
zu beachten ist technisch nicht notwendig, hilft aber dabei, die Anzahl der Datensätze zu reduzieren.--