Flask Admin编辑能够用户更改其数据

问题描述 投票:0回答:1

我正在使用Flask-Admin来管理我的CRUD。我的应用程序中有三个角色,即超级用户,操作员和客户端。

在此应用程序中,运营商必须要求超级用户注册其帐户,更改其数据和其他人。

但对于不计数的客户,我希望他们可以自己注册帐户或编辑他们的帐户信息。

目前,客户端可以自己注册,但现在我希望客户端可以单独编辑他们的信息,而无需通过超级用户。

到目前为止,我只能通过超级用户编辑帐户信息,如此截图:enter image description here

所以现在,我希望客户可以自己编辑他们的姓名,电子邮件,密码或其他信息,还可以将他们的数据与其他客户分开。

这是我的模型的片段:

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'))
)

class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

class Operator(User):
    __tablename__ = 'operator'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))


class Client(User):
    __tablename__ = 'client'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))

那么,如何使用Flask-Admin ..?

python flask flask-sqlalchemy roles flask-admin
1个回答
1
投票

Flask-Security附带内置表单和密码更改视图。我建议使用它。 https://pythonhosted.org/Flask-Security/customizing.html

要通过Flask-Admin视图编辑用户信息,您可以通过执行以下操作来覆盖这些方法。不要忘记在flask-admin用户类中添加“client”作为可接受的角色。自定义筛选器必须在current_user_id上进行筛选,因此无法编辑其他用户配置文件。

def get_query(self) 
    if "superuser" in current_user.roles:
        return self.session.query(self.model)  # as original source code

    else:  # for all other roles
        return self.session.query(self.model).filter(
            < insert custom filter here> )



def get_count_query(self): 
    if "superuser" in current_user.roles:
        return self.session.query(func.count('*')).select_from(self.model) # as original source code

    else: # for all other roles
        return self.session.query(func.count('*')).filter(
            <insert custom filter here>  )

另一种解决方案是构建自定义视图(不使用flask-admin)并将其命名为/ myprofile。

© www.soinside.com 2019 - 2024. All rights reserved.