Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

[gelöst] Facet API Filter Verwendung auf User Rollen beschränken

Eingetragen von pyretta (171)
am 25.07.2017 - 12:36 Uhr in
  • Views
  • Drupal 7.x oder neuer

Hallo,

ich habe folgendes Problem:
Ich hab diverse Filtermöglichkeiten (Facet API) für eine bestimmte View. Einige davon (nicht alle) sollen allerdings nur speziellen User-Rollen zur Verfügung stehen. Wenn ich nun den Block des Facets auf diese Rolle beschränke, wird er natürlich nur für diese Rolle angezeigt, aber alle anderen - auch nicht angemeldete Nutzer - können den Filter trotzdem verwenden über die Adresszeile des Browsers.

Wie kann ich das unterbinden?
Wie kann ich das einstellen, dass der Facet Filter XYZ nur für spezielle Nutzer sichtbar und nutzbar ist - und für alle anderen wird "Zugriff verweigert" o.ä. angezeigt sobald versucht wird ihn anzuwenden?

Ich könnte mir vorstellen dass es da Anwendung im eCommerce-Sektor geben könnte.

Hat hier schon jemand Erfahrung oder eine Idee, wie man das umsetzen könnte?

Vielen Dank im Voraus.

‹ Corlorbox zeigt nicht alle Bilder aus dem Content an [gelöst] Facet API Filter Verwendung auf User Rollen beschränken ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast du die Berechtigung auch

Eingetragen von Jenna (1883)
am 25.07.2017 - 13:06 Uhr

Hast du die Berechtigung auch in der View selbst gesetzt oder nur in dem Block?

Also den Pfad der View, die die Suchergebnisse ausgibt, meine ich...

Wenn diese View auch nur die Berechtigung X hat, dürfte die Ergebnisseite auch nur mit "Zugriff verweigert" erscheinen.

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nee, die View ist für alle -

Eingetragen von pyretta (171)
am 25.07.2017 - 13:25 Uhr

Nee, die View ist für alle - auch Gäste/nicht angemeldete Nutzer - sichtbar und auch verwendbar.
Nur eben diese speziellen Filter sollten nur für spezielle Nutzer funktionieren.

Beipiel:
Immobilien eCommerce Seite. Liste aller Immobilien in einer View. Facet Filter: Stadt, Land, Preis, Zimmer-Anzahl, Quadratmeter.
Dabei sollten z.B. die Filter für Preis und Quadratmeter nur für spezielle Nutzer sichtbar und verwendbar sein. Alle anderen Filter und auch die View sollte für alle sichtbar und verwendbar sein.

Geht sowas?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du könntest einfach 2 Views

Eingetragen von Jenna (1883)
am 25.07.2017 - 13:43 Uhr

Du könntest einfach 2 Views und Blöcke erstellen und die rollenabhängig einblenden.

Rolle Gast /suche/gast

Rolle X /suche/rollex

Macht aber nur dann Sinn wenn ein Gast nicht die z.B. vorgemerkten Listen mit in eine andere Rolle übernimmt, z.B. bei Premium Zugang.

Da der Gast ja bei Rollenwechsel auf einem anderen Viewspfad weiterarbeiten würde..

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das habe ich auch schon

Eingetragen von pyretta (171)
am 25.07.2017 - 14:15 Uhr

Das habe ich auch schon versucht. Habe eine View abgeriegelt und eine View offen für alle zugänglich.
Dann den Facet API Block mit den speziellen Filtern (Quadratmeter, Preis) nur auf der abgeriegelten View nur für spezielle Nutzer eingebunden und erreichbar gemacht.

Aber witziger Weise, kann man dann trotzdem über die Adresszeile des Browsers (
www.beispieldomain.de/immobilien_suche?f[0]=field_quadratmeter%253Aname%3A150) auch als Gast den Filter verwenden - auf beiden Views.

Es ist zum Mäuse melken...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sowas hatte ich auch schon

Eingetragen von Jenna (1883)
am 25.07.2017 - 15:08 Uhr

Sowas hatte ich auch schon mal und man tüftelt rum bis zum Irrsinn..

Ich glaube das lässt sich mit Kontextfiltern in der Views lösen, wenn Bedingung nicht X ist, dann Zugriff verweigert anzeigen.

Jetzt ist nur die Frage auf welche Bedingung man den Bezug setzen muß... so aus dem Stegreif weiß ich das auch nicht mehr.

Falls du nicht weiter kommst, könnte ich das bei mir einmal nachstellen, komme aber erst am Wochenende dazu.

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich versuch grad n Workaround

Eingetragen von pyretta (171)
am 26.07.2017 - 09:02 Uhr

Ich versuch grad n Workaround in dem ich die Rolle des aktuell angemeldeten Nutzers an eine JS-Funktion übergebe und dort wird die URL geprüft und wenn da eben einer dieser Filter auftaucht und der Nutzer hat keine Berechtigung dafür wird der Nutzer umgelenkt.

<script type="text/javascript">
function user_auth(user_role){
var current_url = decodeURIComponent(window.location.href);
if(current_url.lastIndexOf('quadratmeter') != -1
|| current_url.lastIndexOf('preis') != -1){
switch (user_role) {
case 'nicht_authentifiziert':
console.log('Zugriff Verweigert!');
break;

case 'authentifiziert':
console.log('Alles gut.');
break;

default:
console.log('Zugriff Verweigert!');
break;
}
}
}
</script>

<?php

global $user;
if (
in_array("administrator", $user->roles) || in_array("XYZ Premium", $user->roles)) {
        print
'<script>jQuery(document).ready(function(){user_auth("authentifiziert");});</script>';   
    }else{
        print
'<script>jQuery(document).ready(function(){user_auth("nicht_authentifiziert");});</script>';
    }

?>

Bis jetzt klappt das aber noch nicht wirklich. "ReferenceError: user_auth is not defined". Muss irgendwo noch einen entscheidenden Denkfehler haben.

EDIT:
Denkfehler gefunden: Die JS Funktion muss innerhalb einer eingebundenen JS-Datei definiert werden, dann klappt es.

Allerdings wäre mir eine reine Drupal-Interne bzw. serverseite Lösung lieber, da wahrscheinlich sicherer und weniger von außen manipulierbar (hoffe ich jedenfalls).

Gibt es eine Möglichkeit die Facets per Custom Module mit den Nutzerzugriffsrechten bzw. Rollen zu verknüpfen?
Gibt es da einen hook den ich verwenden könnte?

EDIT 2:
@Jenna: Sorry, das mit den Kontextfiltern hatte ich vergessen gestern zu beantworten. Das wäre eigentlich eine gute Idee, glaube ich. Aber in welchen Kontext sollte ich die View setzen? Ich glaub ich hab schon einen Knoten im Kopf. Also... Benutzerrollen kann man ja jeder View so oder so zuweisen bzw. den Zugriff auf div. Rollen beschränken, wahrscheinlich erscheint deshalb auch kein Benutzerfilter in den Kontextfiltern zur Auswahl (?), von daher bin ich da etwas lost.... PS: Das mit dem Angebot, dass du es Nachstellen würdest ist echt super nett, aber ich hoffe dass das nicht nötig wird...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi,da Facet API eine API

Eingetragen von Hyp1 (1463)
am 26.07.2017 - 09:07 Uhr

Hi,

da Facet API eine API ist, solltest Du besser diese verwenden.
Schau mal im Modul im Readme.txt oder in *.api.php nach passenden hooks.

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank Hyp1 für den sehr

Eingetragen von pyretta (171)
am 26.07.2017 - 09:31 Uhr

Vielen Dank Hyp1 für den sehr hilfreichen Hinweis! Habe dabei folgendes gefunden:
http://www.drupalcontrib.org/api/drupal/contributions%21facetapi%21plugi...

Die Klasse "FacetapiDependencyRole" würde wohl genau das was ich brauche erledigen, aber wie setze ich sie ein? Mit hooks habe ich schon die ein oder andere Erfahrung machen können, aber noch nicht mit Klassen, um ehrlich zu sein...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dazu musst Du die Klasse in

Eingetragen von Hyp1 (1463)
am 26.07.2017 - 10:29 Uhr

Dazu musst Du die Klasse in einem Modul(mit der richtigen Ordnerstruktur) erweitern, was nicht ganz einfach ist.
https://www.phase2technology.com/blog/lessons-for-module-development-in-...
Aber schau mal hier, evtl hilft Dir das weiter.
http://drupalsun.com/ygerasimov/2011/11/14/customizing-apachesolr-facets...

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe es gelöst...

Eingetragen von pyretta (171)
am 26.07.2017 - 12:06 Uhr

Hach... das Leben kann manchmal so wunderbar einfach sein......

Durch folgende Erklärungen https://www.drupal.org/node/1715202
Habe ich ein kleines Modülchen geschrieben:

Inhalt "MODULNAME.info":

name = "Facet API User Roles"
description = "Dieses Modul soll Facet Filter div. User Roles zuweisen können bzw. deren Benutzung auf spezielle User Roles einschränken"
package = "Custom"
core = 7.x
dependencies[] = facetapi

Inhalt "MODULNAME.module":

<?php

/**
* Implements hook_facetapi_dependencies().
*/
function MODULNAME_facetapi_dependencies() {
 
$dependencies = array();

 
$dependencies['custom_filter'] = array(
   
'handler' => array(
     
'label' => t('Custom filter'),
     
'class' => 'FacetapiDependencyRole',
    ),
  );

  return
$dependencies;
}

?>

Danach war unter "admin/config/search/search_api/index/default_node_index/facets" dann eine weitere Operation auswählbar: "configure dependencies".
Dort kann man dann ganz bequem die Rollen auswählen, die diese Facets verwenden dürfen. Wählt man nichts aus, ist die Facet uneingeschränkt für alle Nutzer verfügbar.

Nochmal ganz lieben Dank an Hyp1 und Jenna für die guten Tipps, Hinweise und Hilfestellungen! Vielen, vielen Dank.

  • 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 1 Woche 1 Tag
  • Hey danke
    vor 1 Woche 2 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 19 Stunden
  • Da scheint die Terminologie
    vor 2 Wochen 22 Stunden
  • Kannst doch auch alles direkt
    vor 2 Wochen 5 Tagen
  • In der entsprechenden View
    vor 2 Wochen 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 2 Wochen 5 Tagen
  • gelöst
    vor 5 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20450

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 10 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