flask admin:如何根据当前用户的id和角色进行查询?

时间:2017-05-08 05:28:12

标签: python flask flask-admin flask-security

我使用下面的课程,允许用户在注册后编辑自己的个人资料,效果很好。我使用get_queryget_count_query实现了此目的。

但是,如果当前用户是管理员,我该如何自定义它以让他/她查看所有用户的个人资料而不仅仅是他/她自己的个人资料?提前致谢。

 from flask_admin.contrib.sqla.view import ModelView, func

 class User(db.Model, UserMixin):
   id = db.Column(db.Integer, primary_key=True)
   first_name = db.Column(db.String(255))
   last_name = db.Column(db.String(255))
   email = db.Column(db.String(255), unique=True)
   password = db.Column(db.String(255))

   def __str__(self):
     return self.email

 class UserView(ModelView):
   """
   Restrict only the current user can see his/her own profile
   """
   def get_query(self):
      return self.session.query(self.model).filter(self.model.id==current_user.id)
   def get_count_query(self):
      return self.session.query(func.count('*')).filter(self.model.id==current_user.id)

1 个答案:

答案 0 :(得分:2)

这里的另一个选项是检查用户并在我们的get_queryget_count_query中进行相应处理,例如:

def get_query(self):
  if current_user.username == 'admin':
    return self.session.query(self.model)
  else:
    return self.session.query(self.model).filter(
      # your existing filter for user
    )

注意:上面的代码使用了flask_security中的current_user,但可以轻松地适应其他逻辑。