Ergebnis 1 bis 12 von 12

Thema: Benutzer_ID von Contao-Benutzer in Meta_Model "customSQL" nutzen?

  1. #1
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard Benutzer_ID von Contao-Benutzer in Meta_Model "customSQL" nutzen?

    Ich habe einen Bereich den ich für eine geschlossene Benutzergruppe freischalten möchte.

    Um die richtigen Sachen in dem entsprechenden Bereich anzuzeigen, habe ich entsprechende MM-Filter erstellt.
    Bei einem Filter möchte ich gerne nur die Datensätze ausgeben lassen, die zu der ID des aktuell eingeloggten Benutzers passt.

    Hat jemand einen Tipp, wie ich dies in einer customSQL Abfrage erreichen kann?
    Mir fehlt irgendwo der Ansatz, wie ich die Contao-BenutzerID in den Filter bekomme.

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    SELECT id FROM {{table}}
    WHERE userid = {{user::id}} 
    Zitat aus dem Hilfetext:

    Inserttags
    Insert-Tags werden unterstützt. Bitte beachten, dass nicht alle Tags für alle Ausgaben verfügbar sein können. Falls eine Filtereinstellung wie zum Beispiel {{page::id}} benutzt wird, dann ist der Insert-Tag nur für einen Seitenaufruf im Frontend und nicht für einen RRS-Feed verfügbar.
    Beispiel aus dem Handbuch: https://metamodels.readthedocs.io/de...-seite-filtern


    hmm...?

  3. #3
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard

    Hey, vielen Dank.
    Allerdings habe ich gerade noch ein anderes Problem:
    Ich habe ein Meta-Model definiert das eine Liste ausgeben soll.
    Im Bereich Rechte für Eingabemaske und Ansichten hab ich einmal für den Admin ein Filter angelegt, und einmal einen Filter für "Members".
    Admin soll alle Datensätze sehen, die Members nur die Ihnen zugeteilten.

    Dazu habe ich dann für die Members einen Filter erstellt, und testweise erstmal ein eigenes SQL eingetragen, in dem nur nach einem Datensatz abgefragt wird (id=28).
    screenshot_ 6_32_05.jpg

    Nun gehe ich im Backend auf "Benutzer", und melde mich dann bei einem Demo-User über diesen Button an:

    screenshot_ 6_29_43.jpg

    Der Kunde hat über die Benutzer-Gruppe der er zugeordnet ist nur Zugriff auf diesen Bereich "Mein Netzwerk". Klicke ich nun als "Kunde" darauf, sehe ich aber alle Mitglieder in der Datenbank. Der Filter wird also gar nicht auf das Ergebnis angewendet.
    screenshot_ 6_33_17.jpg

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von rethus Beitrag anzeigen
    Hey, vielen Dank.
    Allerdings habe ich gerade noch ein anderes Problem:
    Ich habe ein Meta-Model definiert das eine Liste ausgeben soll.
    Im Bereich Rechte für Eingabemaske und Ansichten hab ich einmal für den Admin ein Filter angelegt, und einmal einen Filter für "Members".
    Admin soll alle Datensätze sehen, die Members nur die Ihnen zugeteilten.

    Dazu habe ich dann für die Members einen Filter erstellt, und testweise erstmal ein eigenes SQL eingetragen, in dem nur nach einem Datensatz abgefragt wird (id=28).
    screenshot_ 6_32_05.jpg

    Nun gehe ich im Backend auf "Benutzer", und melde mich dann bei einem Demo-User über diesen Button an:

    screenshot_ 6_29_43.jpg

    Der Kunde hat über die Benutzer-Gruppe der er zugeordnet ist nur Zugriff auf diesen Bereich "Mein Netzwerk". Klicke ich nun als "Kunde" darauf, sehe ich aber alle Mitglieder in der Datenbank. Der Filter wird also gar nicht auf das Ergebnis angewendet.
    screenshot_ 6_33_17.jpg
    bei "Rechte für Eingabemaske und Ansichten" steht nichts mit "Filter"...

    Im FE gibt es keine "Admins" - oder hast Du die Mitgliedergruppe angelegt?

    Mach zwei CE MM-Liste und wähe dort jeweils einmal einen Filter "keinen Filter auf User" und eine Liste mit Filter "mit Filter auf User" aus und setze die Anzeigerechte jeweils in den CE... je nach MG "Admin" oder "Mitglied" kannst Du unterschiedliche Attribute ausgeben

  5. #5
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard

    Danke für dein Feedback.
    bei "Rechte für Eingabemaske und Ansichten" steht dies
    screenshot_ 7_32_47.jpg

    Der Bereich ist nicht "Mitglieder", sondern "Benutzer", wo dann auch eine Benutzer-Gruppe angelegt wurde.
    screenshot_ 7_34_44.jpg

    Es soll ja nicht im Frontend angezeigt werden, sondern der User soll sich praktisch als "Benutzer" einloggen, um seine Netzwerk-Daten zu pflegen.
    Administrator scheint immer vorhanden zu sein... und dann die Benutzergruppe, die ich angelegt habe.

    Deinen letzten Satz hab ich leider nicht verstanden. Kannst du mir genauer erklären, was du damit meinst? Was ist CE & MG ?

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    CE = Content Element
    MG = Mitgliedergruppe

    Du kannst die Begrifflichkeiten nicht nach beleiben durchenander würfeln und hoffen, irgendwie wird das schon einer hinbekommen!

    Mitglieder => Frontend (FE)

    Benutzer => BE (BE)

    zum Thema BE gab es die Woche zwei Postings mit gleicher Frage... bitte dort mal gucken

  7. #7
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard

    Ok, danke für die Info.
    Es liegt eher daran, das ich die Begrifflichkeiten noch nicht kenne. Bin recht neu bei Contao.

  8. #8
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard

    Ok, ich habe es bis jetzt so gemacht:

    In meinem MetaModel (mm_myNetwork) habe ich ein neues Attribut angelegt "team_member_id".
    Als Attribut-Typ habe ich "Einzelauswahl" genommen.

    Weiter unten bei "Anzeigeeinstellungen" hab ich als Quell-Tabelle die Tabelle mm_customer gewählt.

    In MM_customer hab ich einen Filter des Typs "einfachabfrage" erstellt und das Feld "Statischer parameter" Aktiviert. Das Attribut auf das sich die Einstellung bezieht ist "Contao_User".

    Gehe ich nun zurück in mein Attribut in mm_myNetwork und wähle für den Typ "Einfachabfrage" und wähle unten meinen Filter und setze einen Filterwert.. erhalte ich zumindest in der Eingabemaske schon mal eine Auswahl.
    screenshot_12_35_25.jpg
    screenshot_12_36_38.jpg

    Wenn ich jedoch nun im Filter (mm_customer)) anstatt der "Einfachabfrage" ein "CustomSQL" setze, und dort {{user:id}} wähle:
    Code:
    SELECT id FROM {{table}} WHERE contao_user = {{user::username}}
    erhalte ich einen SQL-Error in dem Input-Feld:
    screenshot_12_39_10.jpg

    Hier wird {{user::username}} (oder jeder andere Parameter hinter "{{user::" scheinbar nicht richtig interpretiert?!

    Wo liegt hier mein Fehler?
    Ist {{user::}} nicht nur für FE-Logins? Ich bin aber als BE-USER im System?! Wie komme ich da an dessen tl_user.id?
    In der Hilfe zu MM steht noch, das man auch {{sessios::}} verwenden kann. Habe aber leider keine Beispiele gefunden um z.B. mal den Aufbau der Session ausgeben zu können um zu sehen wo ich da eine User-Id finde.

    BTW:
    Contao 4.4.44 ... und in der DB sind die Tabellen tl_member & tl_member_group absolut leer. Die Inhalte sind nur in tl_users && tl_user_groups zu sein. nNur als ergänzung, weil in den Docs immer von der Tabelle Members die Rede ist: https://docs.contao.org/books/manual...ber-properties)

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    uff... da fehlt leider einiges an Grundverständnis, wie Contao tickt

    Weiter unten bei "Anzeigeeinstellungen" hab ich als Quell-Tabelle die Tabelle mm_customer gewählt.
    => tl_user wäre richtig - Du willst doch die {{user::id}} mit der Tabelle für die (BE)-Benutzer vergleichen...

    Zum automatischen Abspeichern der User-ID und für die Filterung der Liste im BE nach User-ID oder Group-ID muss man eigene Events erstellen - das kann man sich nicht in MM (mal) nicht einfach so zusammenklicken.

    Ähnliche Anforderungen sind schon ab und an mal eingelaufen, aber meist mit (etwas) unterschiedlichen Wünschen was die Sichtbarkeitsregeln angeht nach Benutzer, Benutzergruppe oder noch was anderem.

    MM ist u.A. auch ein "Bauskastensystem" mit einer Umfangreichen API, so dass man solche Sachen gut (updatesicher) implmentieren kann.

    Nach den bisherigen Positings würde ich empfehlen, Dir dafür Unterstützung vom MM-Team einzuholen... Kontakt oder mail@metamodels.me

  10. #10
    Contao-Nutzer
    Registriert seit
    28.05.2020.
    Beiträge
    21

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    => tl_user wäre richtig - Du willst doch die {{user::id}} mit der Tabelle für die (BE)-Benutzer vergleichen...
    Ja und nee. Im grunde wäre tl_user schon richtig... aber ich hab's noch nicht erwähnt (um es nicht zu kompliziert werden zu lassen): ich habe eine mm_customer Tabelle, die ein Feld "Contao_user" hat. Hier befindet sich eine feste Referenz auf "tf_user.id".

    Demnach bräuchte ich 'nur' die momentane BE-User-ID des gerade eingeloggten Users, die ich gegen die "mm_customer.contao_user" abgleiche und mir über die ID dieser mm_customer meine benötigte "Team-ID" hole.
    Und diese Team-ID ist letztendlich für den BE-USER der Indikator... es sollen Ihn also nur Member mit seiner Team-ID angezeigt werden.
    Mein Ansatz wäre es dann dafür in einem CustomSQL eine Filterregel zu implementieren, welche seine Mitglieder/ Members über die durch mm_customer.contao_user===BE.USERID ermittelte mm_customer.id referenziert wird.

    Ich denke ein wichtiger Baustein der mir auf jeden Fall fehlt isst irgendwie in MM an die BE-User-ID zu kommen.

  11. #11
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Contao ist da inkonsequent und nutzt den {{User::}} Insert Tag für die tl_member, also für die Mitglieder. Ob es für Backend-Nutzer etwas ähnliches gibt, weiß ich nicht.

  12. #12
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    im BE gibt es keine Inserttags

    bei den Events kann man natürlich abprüfen, ob man im FE oder BE ist und auch die "User"-Daten (also User|Member) abfragen...

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •