Flask-permissions: AttributeError: 'str'-Objekt hat kein Attribut 'roles'

Erstellt am 15. Juli 2016  ·  3Kommentare  ·  Quelle: raddevon/flask-permissions

Hallo, ich versuche, den Schritten zu folgen, aber ich erhalte eine Fehlermeldung, wenn ich versuche, Benutzern (UserMIxin-Instanz) Rollen hinzuzufügen, und ich bin mir nicht sicher, wie ich alles zusammenfügen soll.

my_user = UserMixin()
my_user.add_roles('admin', 'superadmin')
db.session.add(my_user)
db.session.commit()

Aber wenn ich einen normalen Benutzer erstelle, mache ich das normalerweise

my_user = User(name="xxx", email="[email protected]", pass="1234")
db.session.add(my_user)
db.session.commit()

mein modell ist so:

class User(UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)
    password = db.Column(db.String(50), nullable=False)

def __init__(self, name, email, password, roles=None):
    """Setting params to the object."""
    self.name = name
    self.email = email.lower()
    self.password = bcrypt.hashpw(
        password.encode('utf-8'), bcrypt.gensalt())
    UserMixin.__init__(self, roles)

.... other methods ...

Irgendwelche Tipps, wie ich es richtig mache? :)
(ich benutze @bepetersn Fork)

Hilfreichster Kommentar

Ich vermute bei dieser Zeile...
first_user = UserMixin
Du meinst das...
first_user = UserMixin()
aber das muss man wirklich machen...
first_user = User()
(wobei User eine UserMixin Unterklasse Ihrer Definition ist).

Sie müssen eine Benutzerinstanz mit Ihrem Benutzermodell erstellen, das eine Unterklasse von UserMixin sein sollte. Sie können es nicht mehr direkt mit UserMixin machen. Ich betrachte dies als Dokumentationsfehler, daher aktualisiere ich derzeit die README, um den richtigen Weg zu zeigen, wie man tatsächlich einen Benutzer mit dem neuen Code erstellt. Ich werde die Tests damit auch reparieren, damit die PR endlich fertig ist!

Alle 3 Kommentare

Hallo Leo, ich hatte endlich die Gelegenheit, mir das anzusehen, und ich hatte Probleme, Ihren genauen Fehler zu finden. Ich habe einige andere gesehen, über die wir sprechen können, und ich weiß vielleicht, was sie verursacht (unten erwähnt). Die gute Nachricht ist jedoch, dass ich ein vollständig funktionsfähiges Beispiel mit Ihrem obigen Benutzermodellcode unter https://github.com/bepetersn/flask-permissions-ex habe.

Es ist schon eine Weile her, dass ich mir dieses Zeug angeschaut habe, aber die größte Änderung bei meinem Fork (zu den oben genannten Fehlern) ist, dass Sie UserMixin jetzt nicht instanziieren sollten – es ist eine abstrakte Modellbasis. Sie möchten also ein Benutzermodell wie das Ihre oben verwenden. Und das kann zu einigen Fehlern führen – ich habe einen anderen als Ihren, weil ich keine Rollen festlegen kann.

Lass mich wissen was du denkst.

Hallo Brian,
Mein Hauptproblem ist, wenn ich Rollen erstelle und dann versuche, sie einem Benutzer hinzuzufügen. Es scheint das Problem zu sein :)

from app import db
from flask_permissions.models import UserMixin, Role

db.create_all()
superadmin.add_abilities(
    'create_admin', 'edit_admin_user', 'delete_admin_user')
db.session.add(superadmin)
db.session.commit()
#....
first_user = UserMixin

first_user.add_roles('superadmin')  ###triggers the error
db.session.add(first_user)
db.session.commit()

Ich vermute bei dieser Zeile...
first_user = UserMixin
Du meinst das...
first_user = UserMixin()
aber das muss man wirklich machen...
first_user = User()
(wobei User eine UserMixin Unterklasse Ihrer Definition ist).

Sie müssen eine Benutzerinstanz mit Ihrem Benutzermodell erstellen, das eine Unterklasse von UserMixin sein sollte. Sie können es nicht mehr direkt mit UserMixin machen. Ich betrachte dies als Dokumentationsfehler, daher aktualisiere ich derzeit die README, um den richtigen Weg zu zeigen, wie man tatsächlich einen Benutzer mit dem neuen Code erstellt. Ich werde die Tests damit auch reparieren, damit die PR endlich fertig ist!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen