33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from app.database import db
|
|
import bcrypt
|
|
|
|
class Role(db.Model):
|
|
__tablename__ = 'roles'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
name = db.Column(db.String(50), unique=True, nullable=False)
|
|
permissions = db.Column(db.JSON, nullable=False)
|
|
|
|
users = db.relationship('User', backref='role', lazy=True)
|
|
|
|
class User(db.Model):
|
|
__tablename__ = 'users'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String(80), unique=True, nullable=False)
|
|
email = db.Column(db.String(120), unique=True, nullable=False)
|
|
password_hash = db.Column(db.String(128), nullable=False)
|
|
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), nullable=True)
|
|
|
|
def set_password(self, password):
|
|
self.password_hash = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
|
|
|
|
def check_password(self, password):
|
|
return bcrypt.checkpw(password.encode('utf-8'), self.password_hash.encode('utf-8'))
|
|
|
|
def to_dict(self):
|
|
return {
|
|
'id': self.id,
|
|
'username': self.username,
|
|
'email': self.email,
|
|
'role': self.role.name if self.role else None,
|
|
'permissions': self.role.permissions if self.role else []
|
|
} |