Flask-permissions: AttributeError: el objeto 'str' no tiene atributo 'roles'

Creado en 15 jul. 2016  ·  3Comentarios  ·  Fuente: raddevon/flask-permissions

Hola, estoy tratando de seguir los pasos, pero recibo un error cuando intento agregar roles al usuario (instancia de UserMIxin) y no estoy seguro de cómo poner todo junto.

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

Pero cuando creo un usuario normal, normalmente lo hago

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

mi modelo es asi:

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

algún consejo sobre cómo hacerlo bien? :)
(estoy usando la bifurcación @bepetersn )

Comentario más útil

Supongo que con esta línea...
first_user = UserMixin
te refieres a esto...
first_user = UserMixin()
pero realmente necesitas hacer esto...
first_user = User()
(donde User es una subclase UserMixin de su definición).

Debe crear una instancia de usuario con su modelo de usuario, que debe ser una subclase de UserMixin. Ya no puedes hacerlo directamente con UserMixin. Considero que esto es un error de documentación, por lo que actualmente estoy actualizando el LÉAME para mostrar la forma correcta de crear un usuario con el nuevo código. Voy a arreglar las pruebas con esto también, ¡así que el PR finalmente estará listo!

Todos 3 comentarios

Hola Leo, finalmente tuve la oportunidad de ver esto y tuve problemas para producir tu error exacto. Vi algunos otros, de los que podemos hablar y podría saber qué los está causando (mencionado a continuación). Sin embargo, la buena noticia es que tengo un ejemplo completamente funcional usando su código de modelo de usuario anterior en https://github.com/bepetersn/flask-permissions-ex.

Ha pasado un tiempo desde que miré estas cosas, pero el mayor cambio con mi bifurcación (re: los errores mencionados anteriormente) es que no deberías instanciar UserMixin ahora, es una base de modelo abstracto. Así que quieres usar un modelo de Usuario como el tuyo arriba. Y eso puede causar algunos errores: obtuve uno diferente al tuyo sobre no poder establecer roles.

Déjame saber lo que piensas.

Hola Brian,
Mi principal problema es cuando creo roles y luego trato de agregarlo a un usuario ... aparece el 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()

Supongo que con esta línea...
first_user = UserMixin
te refieres a esto...
first_user = UserMixin()
pero realmente necesitas hacer esto...
first_user = User()
(donde User es una subclase UserMixin de su definición).

Debe crear una instancia de usuario con su modelo de usuario, que debe ser una subclase de UserMixin. Ya no puedes hacerlo directamente con UserMixin. Considero que esto es un error de documentación, por lo que actualmente estoy actualizando el LÉAME para mostrar la forma correcta de crear un usuario con el nuevo código. Voy a arreglar las pruebas con esto también, ¡así que el PR finalmente estará listo!

¿Fue útil esta página
0 / 5 - 0 calificaciones