[gelöst] Node Access in Views umgehen?

am 07.07.2010 - 06:55 Uhr in
Hallo,
ich möchte gern mittels einer View ein bestimmtes Feld eines bestimmten Inhaltstypes auslesen und nur dieses in einer Übersicht darstellen (bspw. ein Datumsfeld in einem Kalender). Der allgemeine Zugriff auf den Node soll verboten sein, da insbesondere auch der Titel, der Textkörper und die anderen Felder Informationen enthalten, die den angemeldeten Nutzern vorbehalten sind.
Wenn ich mit ContentAccess dem Gast das Leserecht dieses Inhaltstyps entziehe, so liefert auch meine View ein leeres Ergebnis. Wie kann ich dies verhindern? Oder muss ich mir selbst behelfen, indem ich in der meintheme_preprocess_node()
ein drupal_goto()
auf eine "Kein Zugriff"-Seite mache? Wie würdet Ihr das lösen?
Danke für Eure Hilfe
~ aaki
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi ich kann nicht so 100%
am 07.07.2010 - 07:10 Uhr
Hi
ich kann nicht so 100% nachvollziehen, was du erreichen willst, aber schau dir das mal an:
http://stellapower.net/blog/creating-node-view-which-bypasses-access-res...
Hi, ich würde das mit Views +
am 11.07.2010 - 23:58 Uhr
Hi, ich würde das mit Views + Pannel lösen. Einen View für das Feld erzeugen und über pannel den View darstellen.
Gruß
Tom
Zitat: Einen View für das
am 12.07.2010 - 00:45 Uhr
Einen View für das Feld erzeugen und über pannel den View darstellen.
Und wie umgeht man damit dann die Zugriffsrechte? Ô_o
Also ich bin noch kein
am 12.07.2010 - 09:37 Uhr
Also ich bin noch kein Experte aber ich hab es eben mal mit einem einzelnem CCK Feld ausprobiert, Mir wird nur das CCK Feld ohne Bearbeiten Link angezeigt. Den Bearbeiten Link kann man aber als Feld hinzufügen.
Der View:
Pfad: node/%/test
Argument: Node Beitrags ID
Feld: CCK-Feld
Filter: Beitrags-ID
Gruß
Tom
Und du hast mittels Content
am 12.07.2010 - 12:52 Uhr
Und du hast mittels Content Access den Lese-Zugriff auf diesen Node Node verboten und das Panel dann mit einer Benutzerrolle aufgerufen, die per Content Access keine Rechte hat, diesen Node zu sehen?
Denn einfach nur ein einzelnes CCK-Feld eines Nodes in die View zu bringen ist ja kein Problem, es geht ja darum, dass ein User, der den besagten Node *nicht* sehen darf (wegen Zugriffsrechten durch Content Access), trotzdem das CCK-Feld in der View sehen kann. Das heißt, er ruft die View auf und sieht das Feld, aber wenn er den zugehörigen Node direkt aufruft, bekommt er eine Fehler-Seite.
Ist das bei deinem Test gegeben?
Ja
am 12.07.2010 - 13:11 Uhr
Habs eben nochmal getestet.
bei den Berechtigungen musst Du im Views Modul noch dem Gast access all views geben.
Wobei Du Panels hier nicht mal brauchst. Der View alleine tuts auch.
Gruß
Tom
Und ich habe es auch gerade
am 12.07.2010 - 14:09 Uhr
Und ich habe es auch gerade getestet und es funktioniert nicht!
Ich habe einen Inhaltstyp genommen und per Content Access alle Zugriffs-Rechte rausgenommen --> niemand darf die Nodes davon sehen.
Dann noch ein CCK-Feld hinzugefügt und einen neuen Node erstellt. Als Admin konnte ich den Node sehen, sonst nicht, so weit, so gut.
Jetzt eine View erstellt, den Filter auf diesen neuen Inhaltstyp gelegt und als einziges Feld in der View das neue CCK-Feld eingefügt. Außerdem noch schnell eine Seitenansicht mit Pfad erstellt. Zugriff auf die View ist unbeschränkt, wurde zuvor auch extra nochmal getestet (habe den Node-Titel von öffentlichen Nodes ausgeben lassen)
Als Admin den Pfad aufgerufen --> ich bekomme das Feld ausgegeben.
Ausgeloggt und als Gast den Pfad aufgerufen --> ich bekomme gar nichts ausgegeben
Wer keine Zugriffsrechte auf die Nodes hat, kann auch nicht einfach die Felder dieser Nodes in Views sehen.
Ich stimme Dir zu das wenn
am 12.07.2010 - 15:43 Uhr
Ich stimme Dir zu das wenn alle Berechtigungen rausgenommen sind man als Gast nichts sehen kann.
Die Frage aber habe ich so verstanden, dass ein Feld von einer Node gesehen werden soll, aber nicht bearbeitet werden darf. Insofern kann die Berechtigung View für dieses Feld gesetzt werden und man erhält in der neuen Seitenansicht das Feld ausgegeben ohne den Bearbeiten Link und ohne den Rest der Node auch wenn man nur Gast ist
Ich habe erst nach meiner
am 12.07.2010 - 15:49 Uhr
Ich habe erst nach meiner Antwort bemerkt das Du von Content Acces geschrieben hast. Ich benutze das Content permission Modul und kann da die View Berechtigung für einzelne Felder setzten.
Gruß
Tom
lorden26 schrieb Ich habe
am 12.07.2010 - 16:21 Uhr
Ich habe erst nach meiner Antwort bemerkt das Du von Content Acces geschrieben hast. Ich benutze das Content permission Modul und kann da die View Berechtigung für einzelne Felder setzten.
Gruß
Tom
Hallo,
das ist leider keine Lösung, zumindest nicht in meinem Sinn:
CCK Field Permissions does not prevent Drupal's search engine from indexing content that a user might not have access to.
Und außerdem soll der ganze Node dem Gast nicht zur Verfügung stehen. Nur innerhalb der View soll ein Feld in diesem Node (alle Werte dieses Feldes über alle Nodes diese Inhaltstyps) ausgegeben werden.
Idealer Weise wären die Berechtigungen nochmals unterteilt in View/Node/Teaser, sprich man könnte die Rechte so bestimmen, dass Gäste zwar Nodes in der Teaser-Ansicht sehen dürften, nicht aber die volle Ansicht. Bzw. in diesem Fall, dass Nodes in Views gelistet werden könnnen (Ansicht verwendet Felder), nicht aber in der Vollansicht (und bestenfalls auch nicht durch die Suche).
Laut meiner Recherche und dem wie oben beschriebenen Fall gibt es so keine fertige Lösung. Daher werde ich es wie folgt machen:
Die Rechte auf dem relevanten Inhaltstyp frei für alle belassen und mittels der template-preprocess Funktionen entscheiden, ob drupal_access_denied() aufgerufen werden soll. Sollte meine Seite eine Suche haben (hat sie nicht), müsste über ein extra Modul selektiert werden, welche Inhaltstypen indexiert werden und welche nicht. Dieses gibt es auch, nur weiss ich gerade nicht, wie dieses heißt.
Viele Grüße
~ aaki
lorden26 schrieb Die Frage
am 12.07.2010 - 16:27 Uhr
Die Frage aber habe ich so verstanden, dass ein Feld von einer Node gesehen werden soll, aber nicht bearbeitet werden darf.
Nein, Node darf nicht angezeigt, nicht indexiert werden. Nur innerhalb einer Ansicht (Views2) soll ein Feld der Nodes ausgelesen werden und dargestellt werden. Eben zum Beispiel ein Datumsfeld, um in einem Kalender aufzuzeigen, dass an diese Tage schon "belegt" sind oder aber dass es an diesen Tagen ein Ereignis gab. Aber die Infos zu dem Ereignis (Node) bleiben dem Gast verborgen.
Exterio hat recht es funktioniert doch nicht
am 12.07.2010 - 16:35 Uhr
Ich habe meinen Fehler bemerkt. Hatte Inhalt lesen noch für Gäste gesetzt und dann konnten die doch den ganzen Inhalt sehen. Sorry
Content Permission ist wieder
am 12.07.2010 - 16:38 Uhr
Content Permission ist wieder was völlig anderes, das hat ja nichts mit den Zugriffsrechten auf den Node an sich zu tun, sondern da wird geregelt, wer bestimmte CCK-Felder sehen/bearbeiten darf und wer nicht. Damit kannst du aber z.B. nicht verhindern, dass jemand den Node-Titel oder Body angezeigt bekommt usw.
ich möchte gern mittels einer View ein bestimmtes Feld eines bestimmten Inhaltstypes auslesen und nur dieses in einer Übersicht darstellen. Der allgemeine Zugriff auf den Node soll verboten sein,
Es geht also darum, dass der komplette Node an sich nicht eingesehen werden darf, aber ein bestimmtes Feld trotzdem in Views angezeigt werden soll. Das Problem ist nur, dass man Felder in Views nicht sehen kann, wenn man den Node nicht sehen darf.
@aaki
Das ist jetzt zwar nur eine Idee, aber vielleicht würde es als Möglichkeit für dich in Betracht kommen:
Man setzt in Content Access die Zugriffsrechte so, dass alle Rollen, die das Feld sehen sollen, den Node lesen dürfen.
Damit können die Rollen das Feld in Views sehen.
Nun erstellt man eine extra node-inhaltstyp.tpl.php und verändert sie so, dass der Inhalt nur ausgegeben wird, wenn die User-ID 1 ist. Also z.B. so:
//Aus dem hier:
<?php print $content; ?>
//machen wir sowas:
<?php if ($user->uid == 1)
{
print $content;
}
else
{
print 'Sie haben keine Zugriffsberechtigung für diese Seite.';
drupal_set_title('Zugriff verweigert');
} ?>
Oder so ähnlich.
So ähnlich mache ich es ja :)
am 12.07.2010 - 17:09 Uhr
...nur ein wenig anders und für meinen Fall übersichtlicher. Statt eines eigenen Node-Templates überprüfe ich die Rolle des Nutzers direkt in der template.php (THEMENAME_preprocess_node()) und rufe, falls er es nicht sehen darf direkt drupal_access_denied() auf. So erspare ich mir dann auch das Formatieren dieser 404 Seite, indem ich auf die vorhandene umleite. Außerdem werden somit auch die unberechtigten Zugriffe geloggt.
Vielen Dank dennoch!
Liebe Grüße
~ aaki
Ja, ich habe zu lange an dem
am 12.07.2010 - 17:15 Uhr
Ja, ich habe zu lange an dem Beitrag geschrieben und hatte da deinen neuen noch nicht gelesen, hatte schon den neuen Beitrag angefangen, als du den noch nicht gesendet hattest ;-)
Jetzt auch einfacher!
am 07.08.2010 - 08:59 Uhr
Nun gibt es ein Plugin, das genau diesen Fall abdeckt:
Views Ignore Node Permissions