Flask-permissions: AttributeError: objeto 'str' não tem atributo 'roles'

Criado em 15 jul. 2016  ·  3Comentários  ·  Fonte: raddevon/flask-permissions

Oi, estou tentando seguir as etapas, mas estou recebendo um erro ao tentar adicionar funções ao usuário (instância UserMIxin) e não tenho certeza de como juntar tudo.

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

Mas quando crio um usuário normal, geralmente faço

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

meu modelo é assim:

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

alguma dica de como fazer certo? :)
(estou usando o fork @bepetersn )

Comentários muito úteis

Eu suponho com esta linha ...
first_user = UserMixin
você quis dizer isso...
first_user = UserMixin()
mas você realmente precisa fazer isso...
first_user = User()
(onde User é uma subclasse UserMixin da sua definição).

Você precisa criar uma instância de usuário com seu modelo de usuário, que deve ser uma subclasse de UserMixin. Você não pode mais fazer isso diretamente com o UserMixin. Estou considerando isso uma falha de documentação, então estou atualizando o README para mostrar o caminho certo para realmente criar um usuário com o novo código. Vou corrigir os testes com isso também, para que o PR finalmente fique pronto!

Todos 3 comentários

Oi Leo, finalmente tive a chance de ver isso e tive problemas para produzir seu erro exato. Eu vi alguns outros, sobre os quais podemos falar e posso saber o que os está causando (mencionado abaixo). No entanto, a boa notícia é que tenho um exemplo completamente funcional usando seu código de modelo de usuário acima em https://github.com/bepetersn/flask-permissions-ex.

Já faz um tempo desde que olhei para essas coisas, mas a maior mudança com meu fork (re: os erros mencionados acima) é que você não deve instanciar o UserMixin agora - é uma base de modelo abstrata. Então você quer usar um modelo de usuário como o seu acima. E isso pode causar alguns erros -- eu tenho um diferente do seu sobre não poder definir papéis.

Diz-me o que pensas.

Olá Brian,
Meu principal problema é quando eu crio funções e depois tento adicioná-lo a um usuário .. aparece o problema :)

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

Eu suponho com esta linha ...
first_user = UserMixin
você quis dizer isso...
first_user = UserMixin()
mas você realmente precisa fazer isso...
first_user = User()
(onde User é uma subclasse UserMixin da sua definição).

Você precisa criar uma instância de usuário com seu modelo de usuário, que deve ser uma subclasse de UserMixin. Você não pode mais fazer isso diretamente com o UserMixin. Estou considerando isso uma falha de documentação, então estou atualizando o README para mostrar o caminho certo para realmente criar um usuário com o novo código. Vou corrigir os testes com isso também, para que o PR finalmente fique pronto!

Esta página foi útil?
0 / 5 - 0 avaliações