首页 > 解决方案 > 登录用户的视图/API 上的 Flask-AppBuilder 安全性

问题描述

我有一个模型叫Account. 表中的注册用户ab_user可以与M帐户相关联。该模型如下所示:

class Account(Model, AuditMixin):
    __tablename__ = "accounts"
    id = Column(Integer)
    user_id = Column(Integer, ForeignKey("ab_user.id"))
    user = relationship("User" , primaryjoin="Account.user_id == User.id")
    name = Column(String(140))

    def __str__(self):
        return self.name

默认情况下,登录应用程序的用户可以列出所有帐户,无论谁user_id与该帐户关联。

我创建了一个简单的过滤器来查找关联的记录并返回它们。过滤器如下所示:

class OwnerFilter(BaseFilter):
    """
    Lists results with the following criteria:

    1. The account.user_id matches the current user
    """
    
    def apply(self, query: Query, value: Any) -> Query:
        return query.filter(self.model.user == g.user)

AccountModelView

class AccountModelView(ModelView):
    datamodel = SQLAInterface(Account)
    list_columns = ["identifier", "alias", "brokerage.name"]
    add_columns = ["identifier", "alias", "brokerage"]
    edit_columns = ["identifier", "alias", "brokerage"]

    base_filters = [["user_id", OwnerFilter, ""]]

鉴于我需要将此过滤器添加到每个视图(或基类),考虑到如此重要的安全考虑和 AppBuilder 中强大的安全机制,这似乎是有风险的。我觉得我错过了什么。

这是仅查看登录用户记录的正确方法吗?

标签: flaskflask-appbuilder

解决方案


您可以创建自己的自定义安全类。请参阅此处的文档 https://flask-appbuilder.readthedocs.io/en/latest/security.html#your-custom-security


推荐阅读