假设我有User和Subuser表,其中User可以有许多Subusers。如何只允许登录用户(current_user)仅查看属于用户的子用户?即Subuser.user_id == current_user.id
。我得到了我可以通过过滤器来做到这一点,但这必须强制而不是可选的。
如果有帮助,我正在使用SQLAlchemy后端!
答案 0 :(得分:4)
在Flask Admin中覆盖后端生成的查询非常简单 - 你可以做一些非常复杂的事情。请记住覆盖以下所有内容 - 尤其是get_one()。
class BaseModelView(ModelView):
def is_accessible(self):
# if not authenticated we can't see this
if not login.current_user.is_authenticated():
return False
return True
def get_query(self):
return query.filter(self.model.parent_user_id.any(id=login.current_user.id))
def get_count_query(self):
# faster count query!
query = self.session.query(func.count('*')).select_from(self.model).filter(self.model.location_id == login.current_user.id)
return query
def get_one(self, id):
"""
Return a single model by its id.
:param id:
Model id
"""
result = self.session.query(self.model).get(iterdecode(id))
# if the users location does not exist and she is only allowed to edit locations they control
if login.current_user.id != result.parent_user_id:
app.logger.warn('You are not allowed to edit entries for this user.')
abort(404)
return result