如何使用 flask-login 处理角色

How to handle roles with flask-login

我有这个问题我想为我的应用程序创建两个角色,医生和病人所以通过 flask 登录我们创建了一个 class 用户来处理我们应用程序中的限制,但是我如何才能将这些角色到我的用户模型,用于根据角色处理信息。

这是我的用户模型

from flaskblog import db
from flaskblog import login_manager
from flask_login import UserMixin

@login_manager.user_loader # decorator para validar si el usuario está autenticado
def load_user(user_id):
    return User.query.get(int(user_id))

class User(db.Model, UserMixin):
    id= db.Column(db.Integer, primary_key=True)
    username= db.Column(db.String(20), unique=True, nullable=False)
    email= db.Column(db.String(100), unique=True, nullable=False)
    image_file= db.Column(db.String(50), nullable=False, default='default.jpg')
    password= db.Column(db.String(60), nullable=False)
    '''Relacion uno a muchos '''
    # un usuario puede ser autor de uno o muchos posts
    # db.relationship describe la relacion entre el usuario y el post
    # tiene tres params 1: nombre de la clase con la que se establece la relacion}
    # 2: backref con la cual se establece la forma de la relacion el usuario sera el autor del post
    # 3: lazy la forma en que se cargan los datos
    post = db.relationship('Post', backref='author', lazy=True) 

    def __repr__(self):
        return f"User( '{self.username}', '{self.email}', '{self.image_file}')"

我可以为医生和病人创建模型,但如何根据这些角色真正处理信息

您可以像这样向您的模型添加角色,我将其与 Flask-Security 一起使用。将此添加到您的用户对象:

    roles = db.relationship('Role', secondary='roles_users', backref=db.backref('users', lazy='dynamic'))

并添加角色对象

class Role(db.Model, RoleMixin):
    __tablename__ = 'role'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(255), unique=True)
    description = db.Column(db.String(255))

最后添加多对多关系

roles_users = db.Table(
    'roles_users',
    db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
    db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
    )

使用此设置,您可以使用其中之一装饰路线

@roles_accepted('medic', 'patient')
@roles_required('medic')