flask appbuilder prüfen der rolle eines Benutzers

Django, Flask, Bottle, WSGI, CGI…
Antworten
luixx
User
Beiträge: 3
Registriert: Freitag 29. Januar 2021, 10:35

Hallo,

ich würde gern das alle Datensätze angezeigt werden, wenn der Benutzer ein Adminstrator ist. Ich kann durch base_filters die Datensätze schon so filtern, dass nur diese angezeigt werden, die der Benutzer auch angelegt hat. Dazu benutze ich folgende Funktion: (siehe auch https://github.com/dpgaspar/Flask-AppBu ... ndsecurity)

Code: Alles auswählen

def get_user():
    return g.user.id

Code: Alles auswählen

def get_user_role():
    return g.user.roles

Code: Alles auswählen

class MeasuringDevicePosView(ModelView):
    datamodel = SQLAInterface(MeasuringDevicePos)

    if(get_user_role != 'Admin'):
        base_filters = [['user_id', FilterEqualFunction, get_user]]
Leider funktioniert das Prüfen der Rolle nicht. Die Funktion wird nicht aufgerufen. Hat jemand Erfahrung damit? Eine Möglichkeit wäre es die View von Grund auf selber zu implementieren aber das würde ich gern vermeiden.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Vorweg: Scheinbar ist AppBuilder eine Art Framework im Framework - ich habe keine Ahnung davon und kann daher weder Sinnhaftigkeit noch die Scopes/Kontexte bewerten. Aber in deiner Klasse MeasuringDavicePosView rufst du die Funktion auch gar nicht auf. Da fehlen Klammern hinter get_user_role().
luixx
User
Beiträge: 3
Registriert: Freitag 29. Januar 2021, 10:35

Vielen Dank für die Antwort. Wahrscheinlich ist es eine Eigenheit vom appbuilder hier funktioniert der Aufruf ohne Klammern.
base_filters = [['user_id', FilterEqualFunction, get_user]]

ansonsten wenn ich das hier mit Klammern schreibe bekomme ich die Meldung:

This typically means that you attempted to use functionality that needed
to interface with the current application object in some way. To solve
this, set up an application context with app.app_context(). See the
documentation for more information.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Auf der Ebene einer Klasse sollte gar kein ausführbarer Code stehen. Der muß natürlich in die Funktion, in der Du die gefilterten Daten verarbeiten willst.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@luixx: Nein auch da funktioniert kein Aufruf ohne Klammern, zudem ist das ja auch gar nicht die Funktion wo Du das aufrufen vergessen hast und deshalb eine Funktion mit einer Zeichenkette vergleichst.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten