Flask-permissions: AttributeError: objek 'str' tidak memiliki atribut 'peran'

Dibuat pada 15 Jul 2016  ·  3Komentar  ·  Sumber: raddevon/flask-permissions

Hai, saya mencoba mengikuti langkah-langkahnya tetapi saya mendapatkan kesalahan ketika saya mencoba menambahkan peran ke pengguna (contoh UserMIxin) dan saya tidak yakin bagaimana menggabungkan semuanya..

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

Tetapi ketika saya membuat pengguna normal, saya biasanya melakukannya

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

model saya seperti ini:

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

ada tips tentang bagaimana melakukannya dengan benar? :)
(saya menggunakan garpu @bepetersn )

Komentar yang paling membantu

Saya berasumsi dengan baris ini ...
first_user = UserMixin
maksudmu ini...
first_user = UserMixin()
tetapi Anda benar-benar perlu melakukan ini ...
first_user = User()
(di mana User adalah subkelas UserMixin dari definisi Anda).

Anda perlu membuat instance pengguna dengan model Pengguna Anda, yang seharusnya merupakan subkelas UserMixin. Anda tidak dapat melakukannya dengan UserMixin secara langsung lagi. Saya menganggap ini sebagai kegagalan dokumentasi, jadi saya saat ini memperbarui README untuk menunjukkan cara yang benar untuk benar-benar membuat pengguna dengan kode baru. Saya akan memperbaiki tes dengan ini juga, jadi PR akhirnya akan siap!

Semua 3 komentar

Hai Leo, akhirnya saya mendapatkan kesempatan untuk melihat ini, dan saya mengalami kesulitan menghasilkan kesalahan persis Anda. Saya melihat beberapa yang lain, yang dapat kita bicarakan & saya mungkin tahu apa yang menyebabkannya (disebutkan di bawah). Namun, kabar baiknya adalah saya memiliki contoh yang berfungsi penuh menggunakan kode model Pengguna Anda di atas di https://github.com/bepetersn/flask-permissions-ex.

Sudah lama sejak saya melihat hal ini, tetapi perubahan terbesar dengan garpu saya (kembali: kesalahan yang disebutkan di atas) adalah Anda tidak boleh membuat instance UserMixin sekarang -- ini adalah basis model abstrak. Jadi Anda ingin menggunakan model Pengguna seperti milik Anda di atas. Dan itu dapat menyebabkan beberapa kesalahan -- Saya mendapatkan kesalahan yang berbeda dari Anda tentang tidak dapat menetapkan peran.

Biarkan aku tahu apa yang kamu pikirkan.

Hai Brian,
Masalah utama saya adalah ketika saya membuat peran dan kemudian mencoba menambahkannya ke pengguna .. sepertinya masalahnya :)

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

Saya berasumsi dengan baris ini ...
first_user = UserMixin
maksudmu ini...
first_user = UserMixin()
tetapi Anda benar-benar perlu melakukan ini ...
first_user = User()
(di mana User adalah subkelas UserMixin dari definisi Anda).

Anda perlu membuat instance pengguna dengan model Pengguna Anda, yang seharusnya merupakan subkelas UserMixin. Anda tidak dapat melakukannya dengan UserMixin secara langsung lagi. Saya menganggap ini sebagai kegagalan dokumentasi, jadi saya saat ini memperbarui README untuk menunjukkan cara yang benar untuk benar-benar membuat pengguna dengan kode baru. Saya akan memperbaiki tes dengan ini juga, jadi PR akhirnya akan siap!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat