Flask-permissions: AttributeError : l'objet 'str' n'a pas d'attribut 'roles'

Créé le 15 juil. 2016  ·  3Commentaires  ·  Source: raddevon/flask-permissions

Salut, j'essaie de suivre les étapes mais j'obtiens une erreur lorsque j'essaie d'ajouter des rôles à l'utilisateur (instance UserMIxin) et je ne sais pas comment tout mettre ensemble.

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

Mais quand je crée un utilisateur normal, je fais généralement

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

mon modèle est comme ça:

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 ...

des conseils sur la façon de bien faire? :)
(j'utilise la fourche @bepetersn )

Commentaire le plus utile

Je suppose avec cette ligne...
first_user = UserMixin
tu veux dire ça...
first_user = UserMixin()
mais il faut vraiment faire ça...
first_user = User()
(où User est une sous-classe UserMixin de votre définition).

Vous devez créer une instance d'utilisateur avec votre modèle User, qui doit être une sous-classe de UserMixin. Vous ne pouvez plus le faire directement avec UserMixin. Je considère cela comme un échec de la documentation, donc je mets actuellement à jour le README pour montrer la bonne façon de créer un utilisateur avec le nouveau code. Je vais arranger les tests avec ça aussi, donc le PR sera enfin prêt !

Tous les 3 commentaires

Salut Leo, j'ai finalement eu l'occasion de regarder cela, et j'ai eu du mal à produire votre erreur exacte. J'en ai vu d'autres, dont nous pouvons parler et je pourrais savoir ce qui les cause (mentionné ci-dessous). Cependant, la bonne nouvelle est que j'ai un exemple complètement fonctionnel utilisant votre code de modèle utilisateur ci-dessus à https://github.com/bepetersn/flask-permissions-ex.

Cela fait un petit moment que je n'ai pas regardé ce genre de choses, mais le plus gros changement avec mon fork (ré: les erreurs mentionnées ci-dessus) est que vous ne devriez pas instancier UserMixin maintenant - c'est une base de modèle abstraite. Vous souhaitez donc utiliser un modèle utilisateur comme le vôtre ci-dessus. Et cela peut provoquer des erreurs - j'en ai une autre que la vôtre concernant l'impossibilité de définir des rôles.

Laissez-moi savoir ce que vous pensez.

Salut Brian,
Mon principal problème est lorsque je crée des rôles, puis que j'essaie de l'ajouter à un utilisateur .. il semble que le problème :)

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()

Je suppose avec cette ligne...
first_user = UserMixin
tu veux dire ça...
first_user = UserMixin()
mais il faut vraiment faire ça...
first_user = User()
(où User est une sous-classe UserMixin de votre définition).

Vous devez créer une instance d'utilisateur avec votre modèle User, qui doit être une sous-classe de UserMixin. Vous ne pouvez plus le faire directement avec UserMixin. Je considère cela comme un échec de la documentation, donc je mets actuellement à jour le README pour montrer la bonne façon de créer un utilisateur avec le nouveau code. Je vais arranger les tests avec ça aussi, donc le PR sera enfin prêt !

Cette page vous a été utile?
0 / 5 - 0 notes