2017-05-08 31 views
0

我使用了下面的类,允许用户在注册后编辑他们自己的配置文件,它运行良好。我使用get_queryget_count_query来实现这一点。flask admin:如何根据当前用户的ID和角色进行查询?

但是,如果当前用户是管理员,我如何定制它以让他/她查看所有用户的配置文件而不是他/她自己的配置文件?提前致谢。

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) 

回答

3

您可以为管理员定义另一个自定义ModelView。例如:

class UserViewForAdmin(ModelView): 

    def is_accessible(self): 
     return current_user.has_role("admin") 
    def inaccessible_callback(self, name, **kwargs): 
     return redirect(url_for("security.login", next=request.url)) 

    pass 

admin = Admin(name="Flask-Admin Example") 

admin.add_view(UserView(User, db.session, name="Profile") 
admin.add_view(UserViewForAdmin(User, db.session, name="UserList", endpoint="users") 

该示例假设您使用Flask-Security来执行用户管理。

+0

谢谢,它像一个魅力。 – Samoth

相关问题