[gelöst] Inhalte/Felder nicht ausgeben die unter einer bestimmten Rolle erstellt wurde? (Membership-Webseite)
am 29.07.2016 - 17:10 Uhr in
Hallo zusammen,
ich erstelle gerade für einen Kunden eine Branchenbuch-Webseite mit verschiedenen Mitgliedschaften (Basis, Pro, Premium), dazu habe ich die drupal-eigenen Felder des Users erweitert und drei verschiedene Rollen eingerichtet. Was das Mitglied eingeben kann, wird durch die drei Rollen vorgegeben, wobei die Pro-Mitgliedschaft, die Basis-Mitgliedschaft beinhaltet und die Premium-Mitgliedschaft sowohl die Basis-, als auch die Pro-Mitgliedschaft. Also je nachdem welche Rollen man aktiviert, stehem dem Kunden mehr oder weniger Felder zum Ausfüllen zur Verfügung.
Jetzt kann ein User der den Status Pro oder Premium hat mehr Daten in seinen Account eintragen (z.B. Bilder), als ein Basis-Mitglied. Wenn der User aber wieder zurückfällt auf die Basis-Mitgliedschaft (indem ich das Häkchen bei Premium und/oder Pro bei den Rollen entferne), bleibt sein Inhalt trotzdem gespeichert und wird auch bei der Anzeige seines Accounts anderen Mitgliedern, bzw. Gästen ausgegeben/angezeigt.
Besteht mit irgendeinem Modul oder mit Drupal-Bordmitteln, die Möglichkeit diese, unter einer bestimmten Rolle erstellten Inhalte, vor Gästen und anderen zu verstecken, solange der Kunde nicht den richtigen Status hat?
Wenn es nicht anders geht, würde ich die Inhalte auch löschen lassen, aber besser wäre es, wenn sie nur nicht ausgegeben würden, damit der Kunde später nicht alles neu eintragen muss, wenn er wieder einen höheren Status bucht.
Folgende Module verwende ich bis jetzt: siehe Anhang.
Vielen Dank vorab!
Anhang | Größe |
---|---|
module.jpg | 36.8 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Such mal in Drupal.org mit dem Begriff member
am 30.07.2016 - 10:13 Uhr
dann findest Du jede Menge Module. Da ist bestimmt was passendes dabei. Ich denke Du brauchst dafür auf jeden Fall auch noch rules, evtl. auch flag. Organic Group vielleicht auch. Aber ich habe damit noch nicht gearbeitet.
Viele Grüße
Marita Betz
Barrierefreies Webdesign
Marita Betz
http://www.barrierefreies-webdesign-mb.de
field_permissions löst das
am 30.07.2016 - 15:29 Uhr
field_permissions löst das Problem.
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
Bessere User-Experience wahrscheinlich nicht ohne Code
am 30.07.2016 - 22:27 Uhr
Wenn ich den Thread Opener richtig verstehe geht es primär nicht darum, das Einträgen von Inhalten zu beschränken, sondern die Anzeige von Inhalten in Abhängigkeit der Rolle des Autoren, die sich ändern kann.
Wenn man dies mit Field_Permissions angehen möchte muss man allerdings mit Löschen von Inhalten agieren, bei einer Rollen-Änderung z.B. per Rules. Das ist vlltr. eine nicht so schöne Experience für die Kunden, die damit tatsächlich Inhalte verlieren und bei einem "Upgrade" Ihrer Rolle diese wieder ins System einpflegen müssten, nur weil sie vllt. nicht rechtzeitig Ihr Abo verlängert haben.
Edit: So hat es der Thread Opener auch schon als besser für die User Experience angedacht.
Aus diesem Grund würde ich das Problem bei der Anzeige der Profile lösen. Da fällt mir zwar ad hoc kein bestehendes Modul für ein, aber so schwierig ist das nicht zu programmieren. Ich hätte da auch schon ein paar Ideen auf der Basis von Search API und der Steuerung des Indexierungs-Vorgangs. An der Oberfläche könnte man dann per Views die Anzeigen steuern.
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen
Oh, danke Carsten.
am 01.08.2016 - 19:27 Uhr
Das stimmt, das hatte ich anders verstanden und das eigentliche Problem überlesen.
mit field_permissions kann ich für jedes Feld folgende permissions vergeben:
Damit wird also die Möglichkeit der Eingabe und des Zugriffs auf das Feld geregelt, aber das Problem der Darstellung nach Ablauf des Abozeitraums nicht.
Damit die Inhalte nicht gelöscht werden müssen, nur um nicht mehr öffentlich dargestellt zu werden, würde ich die user view mit einer Panels page überschreiben und da die Felder als einzelne panel panes einsetzen mit individuellen Sichtbarkeitsbedingungen (hier z.b. 'user hat Rolle').
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
Die Situation ist ein wenig kompliziert
am 02.08.2016 - 05:35 Uhr
während du natürlich die Rechte des angemeldeten Users steuern kannst, weil dieser als $user immer geladen wird, geht es hier ja um den Autor und seine Rolle.
Das heißt aber, dass der User, unabhängig von seiner Rolle, einen Inhalt nicht lesen darf, weil der Autor eine bestimmte Rolle nicht (mehr) hat.
Das wirst du wahrscheinlich nur mit einem eigenen Filter regeln können, der allerdings alle betroffenen Seiten extrem bremsen wird, weil für jeden content der Autor mit seinen Rechten geladen, und dann entschieden werden muss, ob das eine oder andere Feld angezeigt werden soll, oder nicht.
Grüße
Ronald
mit panels geht das doch.
am 02.08.2016 - 11:12 Uhr
Mit panels kann man die Beziehung zu den Rollen des dargestellten users (oder auch des Autors eines nodes) herstellen und die wie oben kurz beschrieben als Sichtbarkeitsbedingung für jede einzelne panels pane (Feld oder was auch immer) innerhalb der panels page (node variante) nutzen.
Das ist nach meinem Wissen auch cachebar und wäre aus meiner Sicht sogar 'best practice' in Drupal.
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
Danke für die bisherige
am 02.08.2016 - 12:07 Uhr
Danke für die bisherige Beteiligung!
Ich würde nur seeeeeeehr ungerne mit Panels arbeiten! Wenn es IRGENDWIE anders geht, dann lieber anders ;)
Z.Z. versuche ich das ganze mit "Profile 2" und Views zu lösen.
Die Idee dahinter: eine Liste (view) in der die Branchenbuchdaten in Kurzform dargestellt werden, mit einem Link zur Detailseite, z.B. so: webseite.de/branchenbuch/50/werkzeuge-mueller - dann in der URL die ID (z.B. 50) als Argument (Contextual Filter heißt es jetzt ja) auslesen und dann nacheinander (wahrscheinlich über attachment - noch nicht probiert) die drei Versionen der Profile abfragen (Basis, Pro, Premium) und ich meine unter Views kann man den Author mit seiner Rolle filtern - nur noch rausfinden wie ;)
Ich hänge aber leider noch an dem "Argument auslesen" fest, er erkennt zwar die ID = 50 in der URL, zeigt mir auch anderen Inhalt an, als wenn ich eine nicht vergebene ID verwende, aber er zeigt mir nicht den Inhalt an, der unter der ID 50 gespeichert ist, sondern den der ID = 1 (also des Admins), irgendwie muss ich das noch verknüpft kriegen mit der UID des Autors ... ich habe mal Screenshots angehängt, vielleicht hat ja jemand eine Idee?! ;)
Beziehung setzen von Node zum
am 02.08.2016 - 15:57 Uhr
Beziehung setzen von Node zum Autor und dann den Filter über diese Beziehung definieren. Dann kannst Du an die Rolle des Node-Autors kommen.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
@marco. b: ich habe es jetzt
am 05.08.2016 - 15:00 Uhr
@marco. b: ich habe es jetzt doch mit Panels umgesetzt, das funktioniert endlich wie es soll.
Leider hänge ich jetzt trotzdem wieder in Views fest, denn ich möchte vor der Detailansicht (die jetzt dank Panels läuft), noch eine Listenansicht erstellen, wo z.B. die Premium-User nach oben in die Liste sollen und bei den Pro- und Premium-Usern noch ein Vorschaubild angezeigt werden soll.
Aber ich schaffe es einfach nicht in Views die Rolle des Benutzer dessen Profil gerade abgefragt wird auszulesen, es lässt sich immer nur die Rolle des gerade angemeldeten Benutzers auslesen und die brauche ich nicht, da ALLE Benutzer die Profile sehen dürfen, nur soll halt immer noch nicht Inhalt dargestellt werden, der unter einer Pro- oder Premium-Rolle eingestellt wurde.
Kann man nicht evtl. von der detaillierten Panelsseite eine reduzierte Form erstellen (Variante) und diese dann als "Template" in Views einladen für die Liste?
Freut mich, dass du es hingekriegt hast.
am 09.08.2016 - 14:41 Uhr
Leider hänge ich jetzt trotzdem wieder in Views fest, denn ich möchte vor der Detailansicht (die jetzt dank Panels läuft), noch eine Listenansicht erstellen, wo z.B. die Premium-User nach oben in die Liste sollen und bei den Pro- und Premium-Usern noch ein Vorschaubild angezeigt werden soll.
Entweder je eine extra Views pane für Pro- und Premium-User oder views_conditional (Modul) nutzen
Aber ich schaffe es einfach nicht in Views die Rolle des Benutzer dessen Profil gerade abgefragt wird auszulesen, es lässt sich immer nur die Rolle des gerade angemeldeten Benutzers auslesen und die brauche ich nicht, da ALLE Benutzer die Profile sehen dürfen, nur soll halt immer noch nicht Inhalt dargestellt werden, der unter einer Pro- oder Premium-Rolle eingestellt wurde.
Das geht auf jeden Fall - Was hast du denn für eine Basistabelle in deiner View? Profil2-Profile, oder?
Dann wie wla oben schreibt:
Beziehung setzen von Node (oder eben Profil2) zum Autor (User des Profils) und dann den Filter über diese Beziehung definieren. Dann kannst Du an die Rolle des Node-Autors kommen.
Unter Filer nach Rolle des Users filtern, der über o.g. Beziehung hergeholt wurde.
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
Ich habe Profile2 wieder
am 09.08.2016 - 17:58 Uhr
Ich habe Profile2 wieder runtergeschmissen und es mit dem eingebauten Profil aufgesetzt.
Für die Darstellung der Detailseite habe ich jetzt Panels genommen, dort kann man auf "user being viewed" schalten und somit die Rollen des Autors abfragen und dementsprechend die Inhalte darstellen oder auch nicht. Sie bleiben jedenfalls erhalten, wenn der Autor die Rolle verliert, aber sie werden - wie gewüncht - nicht mehr ausgegeben (wobei ich mittlerweile, zumindest theoretisch auch weiß, wie es über Views geht*, aber Panels lässt sich dann doch etwas netter stylen ;)).
Für die Listendarstellung nehme ich Views und ich weiß nicht wieso es anfangs nicht geklappt hat, aber ich muss einfach nur unter den Filtern die Rollen abfragen ... manchmal sieht man ja den Wald vor lauter Bäumen nicht ... allerdings bin ich auch nicht mit der Liste angefangen, sondern mit der Detailseite, wo ich auch noch mit Argumentübergabe arbeiten musste, das hat die Sache sicherlich erschwert. (* jetzt wo ich weiß wie es in der Liste funktioniert, könnte ich eine weitere Seite anlegen und das mit den Argumenten noch mal probieren, aber wie schon geschrieben, das Stylen ist dann doch schöner in Panels).
Das views_conditional Modul hatte ich auch irgendwann gefunden, das half mir dann sehr beim Trennen der Inhalte. Selbst per Anhang/Attach die Premium-Einträge nach oben zu verschieben hat geklappt *freu*
Also ich habe jetzt eine Listendarstellung in der alles angezeigt wird wie es soll und eine Detailseite wo ebenfalls nur das ausgegeben wird, was erlaubt ist. Der Rest (das Stylen und passende Felder anlegen) ist jetzt nur noch Fleißarbeit (hoffe ich ;)).
Allen vielen Dank fürs "Hinschubsen" in die richtige Richtung! Hab den Beitrag als gelöst markiert.