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フォークを使用しています)

最も参考になるコメント

私はこの行で仮定します...
first_user = UserMixin
あなたはこれを意味します...
first_user = UserMixin()
しかし、あなたは本当にこれをする必要があります...
first_user = User()
(ここで、 Userは定義のUserMixinサブクラスです)。

UserMixinのサブクラスであるUserモデルを使用してユーザーインスタンスを作成する必要があります。 UserMixinで直接それを行うことはもうできません。 私はこれをドキュメントの失敗と考えているので、現在READMEを更新して、新しいコードで実際にユーザーを作成する正しい方法を示しています。 これでもテストを修正するので、いよいよPRの準備が整います!

全てのコメント3件

こんにちはレオ、私はついにこれを見る機会を得ました、そして私はあなたの正確なエラーを生み出すのに苦労しました。 私は他のいくつかを見ましたが、それについて話すことができ、何がそれらを引き起こしているのかを知っているかもしれません(以下で説明します)。 ただし、良いニュースは、 https://github.com/bepetersn/flask-permissions-exで上記のユーザーモデルコードを使用した完全に機能する例があることです。

このようなものを見てから少し経ちましたが、私のフォークでの最大の変更点(上記のエラー)は、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サブクラスです)。

UserMixinのサブクラスであるUserモデルを使用してユーザーインスタンスを作成する必要があります。 UserMixinで直接それを行うことはもうできません。 私はこれをドキュメントの失敗と考えているので、現在READMEを更新して、新しいコードで実際にユーザーを作成する正しい方法を示しています。 これでもテストを修正するので、いよいよPRの準備が整います!

このページは役に立ちましたか?
0 / 5 - 0 評価