每行Flask-Admin用户读/写设置

时间:2014-10-01 17:33:35

标签: sql flask sqlalchemy admin

假设我有User和Subuser表,其中User可以有许多Subusers。如何只允许登录用户(current_user)仅查看属于用户的子用户?即Subuser.user_id == current_user.id。我得到了我可以通过过滤器来做到这一点,但这必须强制而不是可选的。

如果有帮助,我正在使用SQLAlchemy后端!

1 个答案:

答案 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