首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用flask-login处理角色

如何使用flask-login处理角色
EN

Stack Overflow用户
提问于 2021-01-16 11:44:54
回答 1查看 41关注 0票数 0

我有这个问题,我想为我的应用程序创建两个角色,医生和患者,所以使用flask登录,我们创建了一个用户类来处理我们应用程序中的限制,但我如何根据角色将这些角色转换为我的用户模型来处理信息。

这是我的用户模型

代码语言:javascript
复制
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}')"

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-16 23:46:39

你可以像这样将角色添加到你的模型中,我在Flask-Security中使用了这个。将以下内容添加到您的用户对象:

代码语言:javascript
复制
    roles = db.relationship('Role', secondary='roles_users', backref=db.backref('users', lazy='dynamic'))

并添加Roles对象

代码语言:javascript
复制
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))

最后添加多对多关系

代码语言:javascript
复制
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'))
    )

通过此设置,您可以使用以下选项之一来装饰路径

代码语言:javascript
复制
@roles_accepted('medic', 'patient')
@roles_required('medic')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65746286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档