簡體   English   中英

如何確定用戶是否是 Flask 中管理員組的成員

[英]How to determine if a user is a member of an admin group in Flask

我是使用 Flask 的新手,因此對可能是一個基本問題表示歉意。

我正在開發一個新的 Flask 應用程序,該應用程序在數據庫中有多個表。 有一個用於存儲用戶信息(名稱、密碼、啟用)的表。 另一個表保存組名,如果它是管理員組(類型為布爾值)。 第三個表將用戶與他們所屬的組相關聯,因為他們可能是多個組的成員。 這是來自models.py的相關代碼

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(10), index=True, unique=True)
password_hash = db.Column(db.String(128))
active_user = db.Column(db.Boolean)
group_ids = db.relationship('GroupMembers', backref='user', lazy='dynamic' )

def __repr__(self):
    return 'User {} | Active {}'.format(self.username, self.active_user)

def set_password(self, password):
    self.password_hash = generate_password_hash(password)

def check_password(self, password):
    return check_password_hash(self.password_hash, password)

def check_admin(self):
    group_ids = self.group_ids.all()
    for row in group_ids:
        group = Group.query.get(int(row.gid))
        if group.admin_rights:
            return True
    return False

class Group(db.Model):
gid = db.Column(db.Integer, primary_key=True)
groupname = db.Column(db.String(60), index=True, unique=True)
admin_rights = db.Column(db.Boolean)
group_members = db.relationship('GroupMembers', backref='members', lazy='dynamic')

def __repr__(self):
    return 'ID: {} | Name: {} | Admin: {}'.format(self.gid, self.groupname, self.admin_rights)

def is_admin_group(self, gid):
    _group = self.query.get(int(gid))
    return _group.admin_rights

class GroupMembers(db.Model):
__table_args__ = ( db.UniqueConstraint('gid', 'uid'), )
id = db.Column(db.Integer, prmary_key=True)
gid = db.Column(db.Integer, primary_key=True, db.ForeignKey('group.gid'))
uid = db.Column(db.Integer, primary_key=True, db.ForeignKey('user.id'))

def __repr__(self):
    return "{}.{}".format(self.gid, self.uid)

我試圖找到確定用戶是否是管理員組成員的最佳方法(group.admin_rights == True)。 “用戶”中的“check_admin”function 有效,但我不確定如何從 html 模板中調用它。 這可以用類似的東西來調用嗎

{% if current_user.check_admin() %}

假設您的 check_admin() 工作正常,您可以像這樣傳遞額外的 check_admin 標志

return render_template('sample_page.html', admin=check_admin())

在 Jinja 模板中,您可以簡單地檢查管理員用戶:

{% if admin %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM