繁体   English   中英

在Python Flask中,如何通过当前登录用户获取角色名称?

[英]In Python Flask, how to get the role name by the current logged in user?

对于Flask中的用户角色多对多关系,我有3个表。 我应该如何从当前用户那里获得角色名称?

在我的models.py中

class User(db.Model, UserMixin):
    __tablename__ = "Users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), nullable=False, unique=True)
    password = db.Column(db.String(255), nullable=False, server_default='')

    # Define the relationship to Role via UserRoles
    roles = db.relationship('Role', secondary='UserRoles', backref=db.backref("user", lazy="dynamic"))


# Define the Role data-model
class Role(db.Model):
    __tablename__ = 'Roles'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), unique=True)
    users = db.relationship('User', secondary='UserRoles', backref=db.backref("role", lazy="dynamic"))


# # Define the UserRoles association table
class UserRole(db.Model):
    __tablename__ = 'UserRoles'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('Users.id', ondelete='CASCADE'))
    role_id = db.Column(db.Integer(), db.ForeignKey('Roles.id', ondelete='CASCADE'))

在我的views.py中:

from flask_user import current_user

@app.route("/TestUserRole")
def user_role():
    role = current_user.role
    return str(role)

在浏览器上,它显示了返回的结果:

SELECT [Roles].id AS [Roles_id], [Roles].name AS [Roles_name] FROM [Roles], [UserRoles] WHERE [UserRoles].user_id = ? AND [Roles].id = [UserRoles].role_id

有没有可能显示当前用户的角色名称的方法,类似以下内容(尽管是错误的示例,因为它会弹出错误)?

role = current_user.role.name

current_user.has_roles函数将有所帮助。

这很简单:假设您已配置以下角色,例如

角色1:管理员

角色2:经理

如果用户没有关联的角色,则current_user.has_roles()将为False。

如果登录的用户具有“管理员”角色,则可以使用current_user.has_roles('Admin')进行验证。

因此,可以通过has_roles()访问用户角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM