Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Hyperlinks für bestimmte Rollen verbieten/ausblenden

Eingetragen von stixer2 (113)
am 03.04.2015 - 13:43 Uhr in
  • Allgemeines zu Drupal
  • Drupal 7.x

Hi.

Ich habe 2 User-Rollen: 1=Basic und 2=Premium.
Basic-user dürfen keine Links veröffentlichen. Das habe ich mit field-validation und folgendem script gelöst:

$mystring = $this->value;
$arr = array("http", "https", "www", ".com", ".org", ".net", ".info", ".mil", ".mobi", ".edu", ".gov",  ".biz", ".ac", ".ad", ".ae", ".af", ".ai", ".al", ".am", ".ao", ".aq", ".ar", ".as", ".at", ".au", ".aw", ".ax", ".az", ".ba", ".bb", ".bd", ".be", ".bf", ".bg", ".bh", ".bi", ".bj", ".bm", ".bn", ".bo", ".br", ".bs", ".bt", ".bw", ".by", ".bz", ".ca", ".cc", ".cd", ".cf", ".cg", ".ch", ".ci", ".ck", ".cl", ".cm", ".cn", ".co", ".cr", ".cu", ".cv", ".cw", ".cx", ".cy", ".cz", ".de", ".dj", ".dk", ".dm", ".do", ".dz", ".ec", ".ee", ".eg", ".er", ".es", ".et", ".eu", ".fi", ".fj", ".fk", ".fm", ".fo", ".fr", ".ga", ".gd", ".ge", ".gf", ".gg", ".gh", ".gi", ".gl", ".gm", ".gn", ".gp", ".gq", ".gr", ".gs", ".gt", ".gu", ".gw", ".gy", ".hk", ".hm", ".hn", ".hr", ".ht", ".hu", ".id", ".ie", ".il", ".im", ".in", ".io", ".iq", ".ir", ".is", ".it", ".je", ".jm", ".jo", ".jp", ".ke", ".kg", ".kh", ".ki", ".km", ".kn", ".kp", ".kr", ".kw", ".ky", ".kz", ".la", ".lb", ".lc", ".li", ".lk", ".lr", ".ls", ".lt", ".lu", ".lv", ".ly", ".ma", ".mc", ".md", ".me", ".mh", ".mk", ".ml", ".mn", ".mo", ".mp", ".mq", ".mr", ".ms", ".mt", ".mu", ".mv", ".mw", ".mx", ".my", ".mz", ".na", ".nc", ".ne", ".nf", ".ng", ".ni", ".nl", ".no", ".np", ".nr", ".nu", ".nz", ".om", ".pa", ".pe", ".pf", ".pg", ".ph", ".pk", ".pl", ".pm", ".pn", ".pr", ".ps", ".pt", ".pw", ".py", ".qa", ".re", ".ro", ".rs", ".ru", ".rw", ".sa", ".sb", ".sc", ".sd", ".se", ".sg", ".sh", ".si", ".sk", ".sl", ".sm", ".sn", ".sp", ".sr", ".ss", ".st", ".sv", ".su", ".sx", ".sy", ".sz", ".tc", ".td", ".tf", ".tg", ".th", ".tj", ".tk", ".tl", ".tm", ".tn", ".to", ".tr", ".tt", ".tv", ".tw", ".tz", ".ua", ".ug", ".uk", ".us", ".uy", ".uz", ".va", ".vc", ".ve", ".vg", ".vi", ".vn", ".vu", ".wf", ".ws", ".ye", ".za", ".zm", ".zw", ".name", ".pro", ".aero", ".asia", ".cat", ".coop", ".jobs", ".museum", ".tel", ".travel");
    foreach ($arr as &$findme) {
           $value = strpos($mystring, $findme);
           if ($value === false) {
           } else {
               $this->set_error();
           }
    }

Jetzt meine Frage/Problem:
Wenn ein Premium-user ein Basic-user wird, stehen in seiner node ja eventuell noch Links. Die müssten dann dort aber verschwinden. Umgekehrt sollte der Link wieder erscheinen, wenn der user später wieder Premium-user wird.

Ich habe bisher kein Modul gefunden. Wie kann man das lösen? Ich glaube es gibt Module, die bestimmte Worte ersetzen oder löschen (z.B. um Schimpfworte aus comments zu entfernen), ich weiß aber nicht mehr, wie das heißt. Wäre das ein Ansatz?

Danke und Grüße!

‹ (geloest) files Browser verstecken node/add template ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Du kannst die Links natürlich

Eingetragen von torfnase (1525)
am 03.04.2015 - 14:22 Uhr

Du kannst die Links natürlich auch (rollenabhängig) mit der JQuery ausblenden.
Natürlich ist das nicht so sicher, man kann ja JavaScript auch ausschalten, aber dann blieben in der Node natürlich die Links enthalten.

Gruß
Berthold Lausch

  • Anmelden oder Registrieren um Kommentare zu schreiben

oder aber

Eingetragen von ronald (3857)
am 03.04.2015 - 20:14 Uhr

Du verwendest unterschiedliche content_types und unterschiedliche Textfilter.

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_node_view

Eingetragen von C_Logemann (912)
am 04.04.2015 - 13:46 Uhr

Javascript lässt die Daten nicht wirklich verschwinden (lässt sich ja abschalten) und ein zweiter Node-Typ steht der Anforderung entgegen, daß die Rollen sich auch ständig ändern können. Somit müsste man bei einem Rollenwechsel alle Nodes des entsprechenden Benutzers dann ihren Typ wechseln lassen. Deswegen macht ein Field-Validierung nicht viel Sinn, wenn die Inhalte gleich bleiben sollen, nur deren anzeige sich aufgrund der Rollen des Autoren ändern soll.

Die meisten Module, die z.B. "böse Wörter" zensieren operieren über das Filter-System. Das hat leider keine Meta-Informationen zur Verfügung. Ich habe mich bemüht, diese in Drupal 8 einzubringen, allerdings ohne Erfolg bisher. Somit würde ich z.B. am Node-View ansetzen mit hook_node_view. Dort hat man Zugriff auf den Autoren und kann anhand dessen Rollen die Anzeige des Nodes manipulieren.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Dort hat man Zugriff

Eingetragen von torfnase (1525)
am 04.04.2015 - 15:42 Uhr
Zitat:

Dort hat man Zugriff auf den Autoren und kann anhand dessen Rollen die Anzeige des Nodes manipulieren.

Gute Idee :-)
ein spezielles node-Template ist sicherlich eine sicherere Lösung, als die Links einfach per JavaScript auszublenden.
Aufwendig wird es nur, wenn es sehr viele unterschiedlichen Inhaltstypen gibt, bei denen man ja immer ein neues Template erstellen müßte.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Angenommen, die Links wären

Eingetragen von leda.ch (977)
am 05.04.2015 - 23:44 Uhr

Angenommen, die Links wären separate Felder, könnte man diese Rollengerecht ein- und ausblenden. man müsste dann aber im Text die Verwendung von Links für alle verbieten...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Aufwendig wird es nur, wenn

Eingetragen von montviso (2188)
am 06.04.2015 - 15:07 Uhr

Aufwendig wird es nur, wenn es sehr viele unterschiedlichen Inhaltstypen gibt, bei denen man ja immer ein neues Template erstellen müßte.
Könnte man das Entfernen des Links nicht global auf ein Template für das Body-Field (field--body.tpl.php) anwenden?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Regina, Zitat: Könnte

Eingetragen von torfnase (1525)
am 06.04.2015 - 15:48 Uhr

Hallo Regina,

Zitat:

Könnte man das Entfernen des Links nicht global auf ein Template für das Body-Field (field--body.tpl.php) anwenden?

Das kommt darauf an, ob man den Textkörper auch immer so nennt.
Ich mache das meist nicht, ich löschen immer das Body-Feld und nehme ein neues Feld her, welches im Namen einen Bezug zum Inhaltstyp hat.

Österliche Grüße
Berthold

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Berthold,Ja, stimmt, das

Eingetragen von montviso (2188)
am 06.04.2015 - 16:59 Uhr

Hi Berthold,
Ja, stimmt, das wäre natürlich Voraussetzung.
Warum benennst Du das Feld routinemäßig um?

Dir - und Allen anderen - auch Schöne Ostern.
Heute ist Computer-Wetter. ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Warum benennst Du das

Eingetragen von torfnase (1525)
am 06.04.2015 - 18:00 Uhr
Zitat:

Warum benennst Du das Feld routinemäßig um?

Damit ich in Views leichter sehen kann, welches Feld ich da zu packen habe und deshalb schreibe ich eben auch noch zu dem "Textkörper" dazu, zu welchem Inhaltstypen er gehört.
Beispiel:
event_body für Kalendereinträge

Das ist nur so eine Art von mir, muß ja nicht sein.

@Wetter
also hier war ganz schönes Wetter heute. Eben habe ich noch mit jemandem aus Hannover telefoniert und die saßen auf dem Balkon :-)

Naja, aber normalerweise ist das Wetter bei euch im tiefen Süden ja besser :-)

Gruß
Berthold

  • Anmelden oder Registrieren um Kommentare zu schreiben

ronald schrieb Du verwendest

Eingetragen von stixer2 (113)
am 07.04.2015 - 09:18 Uhr
ronald schrieb

Du verwendest unterschiedliche content_types und unterschiedliche Textfilter.

Das ist leider nicht möglich, weil dazu schon zu viele user Inhalte gepostet haben und weil das auch bis zu 20 Felder betreffen würde.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn es überall das Body-Feld

Eingetragen von montviso (2188)
am 07.04.2015 - 10:01 Uhr

Wenn es überall das Body-Feld betrifft, dann würde ich wirklich das Field-Template anpassen und mir eine der Code-Beispiele im Netz suchen, mit denen man mittels Regulärem Ausdruck Links entfernt.
Und das ganze natürlich abhängig von der Benutzerrolle.
Ich wüßte nicht, wie man das ohne Code hinbekommen könnte.

  • Anmelden oder Registrieren um Kommentare zu schreiben

das es sich um bestehende Inhalte handelt

Eingetragen von ronald (3857)
am 07.04.2015 - 10:15 Uhr

und der Zustand auch wieder zurückwecheln können soll, also intern der Link gespeichert werden soll, bleibt eigentlich nur eine Kombination aus CSS und JQUERY übrig.

$('a').hide();

Ist ein Ansatz.

Dies muss natürlich mit einer Berechtigkeitsprüfung und dem Setzen eines entsprechenden Flags einhergehen.
Das kann wohl am ehesten das Template leisten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Warum Ronald? Man könnte doch

Eingetragen von montviso (2188)
am 07.04.2015 - 10:24 Uhr

Warum Ronald?
Man könnte doch auch das Template wieder entfernen.
Das löscht ja nichts aus der Datebank, sondern unterdrückt nur serverseitig die Ausgabe.

Das mit jQuery würde ich davon abhängig machen, wie wichtig die Unterdrückung ist.
Wenn es egal ist, daß es ohne JS doch angezeigt wird, dann kann man das natürlich machen und es ist dann auch die einfachste Lösung.

Wichtig finde ich in jedem Fall, daß der User mit eingeschränkten Rechten informiert wird, warum seine Links nicht angezeigt werden.
Ansonsten fummelt jemand da stundenlang rum...;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

wenn ich das richtig verstanden habe

Eingetragen von ronald (3857)
am 07.04.2015 - 10:34 Uhr

soll die Anzeige nicht vom Recht des Users, sondern dem des Publishers abhängig sein.
Die Anzeige soll jeweils wechseln, wenn der Publisher einen Obulus entrichtet hat, oder nicht.

Damit müssen alle Daten immer da sein, eber gelegentlich unterdrückt werden.

Mit display:none kann man zwar im Quellcode den Link finden, er wird aber nicht angezeigt.

Setzt man dies als default, würden bei unterdrücktem JavaScript keine Links angezeigt.

Da sonst auch nicht viel ohne JS läuft, sollte man damit leben können.

Dies würde auch die sonstige Rechtestrategie von Drupal bestätigen, in der Rechte nur gegeben, also erweitert werden.

Das muss dann antürlich im Template ablaufen.

Natürlich get das auch in einer Funktion der Ausgabe, also vor oder während dem rendern der Section.
Dann könnte man sogar auf JS verzichten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 3 Tagen
  • Hey danke
    vor 2 Wochen 4 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 4 Wochen 5 Stunden
  • In der entsprechenden View
    vor 4 Wochen 5 Stunden
  • Dazu müsstest Du vermutlich
    vor 4 Wochen 5 Stunden
  • gelöst
    vor 6 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20456

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 17 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association