我正在使用Flask-Admin来管理我的CRUD。我的应用程序中有三个角色,即超级用户,操作员和客户端。
在此应用程序中,运营商必须要求超级用户注册其帐户,更改其数据和其他人。
但对于不计数的客户,我希望他们可以自己注册帐户或编辑他们的帐户信息。
目前,客户端可以自己注册,但现在我希望客户端可以单独编辑他们的信息,而无需通过超级用户。
所以现在,我希望客户可以自己编辑他们的姓名,电子邮件,密码或其他信息,还可以将他们的数据与其他客户分开。
这是我的模型的片段:
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 ..?
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。