您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用多个用户类别实现Flask-Login

使用多个用户类别实现Flask-Login

您可以使用特定角色定义每个用户。例如,用户“ x”可以是SCHOOL,而用户“ y”可以是“ STAFF”。

class User(db.Model):

    __tablename__ = 'User'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(80),unique=True)
    pwd_hash = db.Column(db.String(200))
    email = db.Column(db.String(256),unique=True)
    is_active = db.Column(db.Boolean,default=False)
    urole = db.Column(db.String(80))


    def __init__(self,username,pwd_hash,email,is_active,urole):
            self.username = username
            self.pwd_hash = pwd_hash
            self.email = email
            self.is_active = is_active
            self.urole = urole

    def get_id(self):
            return self.id
    def is_active(self):
            return self.is_active
    def activate_user(self):
            self.is_active = True         
    def get_username(self):
            return self.username
    def get_urole(self):
            return self.urole

但是Flask-login还没有用户角色的概念,我写了自己的login_required装饰器版本来覆盖它。因此,您可能想要使用类似以下的内容

def login_required(role="ANY"):
    def wrapper(fn):
        @wraps(fn)
        def decorated_view(*args, **@R_502_1562@):

            if not current_user.is_authenticated():
               return current_app.login_manager.unauthorized()
            urole = current_app.login_manager.reload_user().get_urole()
            if ( (urole != role) and (role != "ANY")):
                return current_app.login_manager.unauthorized()      
            return fn(*args, **@R_502_1562@)
        return decorated_view
    return wrapper

然后,可以在如下视图函数上使用此装饰器:

@app.route('/school/')
@login_required(role="SCHOOL")
def restricted_view_for_school():
    pass
Python 2022/1/1 18:35:08 有422人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶