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 )
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!
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 subkelasUserMixin
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!