Flask-permissions: AttributeError:“str”对象没有属性“roles”

创建于 2016-07-15  ·  3评论  ·  资料来源: raddevon/flask-permissions

嗨,我正在尝试按照这些步骤操作,但是当我尝试向用户(UserMIxin 实例)添加角色时出现错误,并且我不确定如何将所有这些放在一起。

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

但是当我创建一个普通用户时,我通常会这样做

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

我的模型是这样的:

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

关于如何做对的任何提示? :)
(我使用@bepetersn fork)

最有用的评论

我假设这条线......
first_user = UserMixin
你是这个意思...
first_user = UserMixin()
但你真的需要这样做......
first_user = User()
(其中User是您定义的UserMixin子类)。

你需要用你的 User 模型创建一个用户实例,它应该是 UserMixin 的一个子类。 你不能再直接用 UserMixin 来做。 我认为这是文档失败,因此我目前正在更新 README 以显示使用新代码实际创建用户的正确方法。 我也会用这个来修复测试,所以PR 终于准备好了!

所有3条评论

嗨,Leo,我终于有机会看看这个,但我在产生你的确切错误时遇到了麻烦。 我看到了其他一些,我们可以讨论一下,我可能知道是什么导致了它们(如下所述)。 但是,好消息是我在https://github.com/bepetersn/flask-permissions-ex 有一个使用上述用户模型代码的完整功能示例。

自从我看这些东西以来已经有一段时间了,但是我的 fork 最大的变化(re:上述错误)是你现在不应该实例化 UserMixin ——它是一个抽象模型库。 所以你想使用像上面这样的用户模型。 这可能会导致一些错误——关于无法设置角色,我得到了与您不同的错误。

让我知道你的想法。

嗨,布赖恩,
我的主要问题是当我创建角色然后尝试将其添加到用户时.. 出现问题:)

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

我假设这条线......
first_user = UserMixin
你是这个意思...
first_user = UserMixin()
但你真的需要这样做......
first_user = User()
(其中User是您定义的UserMixin子类)。

你需要用你的 User 模型创建一个用户实例,它应该是 UserMixin 的一个子类。 你不能再直接用 UserMixin 来做。 我认为这是文档失败,因此我目前正在更新 README 以显示使用新代码实际创建用户的正确方法。 我也会用这个来修复测试,所以PR 终于准备好了!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

hansent picture hansent  ·  3评论

ghost picture ghost  ·  3评论

gw0 picture gw0  ·  3评论

DarwinSurvivor picture DarwinSurvivor  ·  3评论

mitsuhiko picture mitsuhiko  ·  3评论