flask - 登录用户的视图/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 中强大的安全机制,这似乎是有风险的。我觉得我错过了什么。
这是仅查看登录用户记录的正确方法吗?
解决方案
您可以创建自己的自定义安全类。请参阅此处的文档 https://flask-appbuilder.readthedocs.io/en/latest/security.html#your-custom-security
推荐阅读
- json - 如何将解释为字符串的多个json对象转换为Json字典
- mysql - 如何在 MYSQL 中同时使用 LIKE 和 BETWEEN?
- laravel - 如何在 Laravel 的根目录中创建模块
- julia - 有没有办法从 Julia 的谷歌驱动器下载一个 excel 文件(带有多张表)?
- amazon-web-services - Athena 分区投影未按预期工作
- arrays - 哪个最适合点列表:点结构数组还是二维数组?
- c# - 如何使用 SpecFlow 使用不同的输入数据多次运行相同的场景?
- excel - VBA 粘贴特殊失败问题
- c++ - 当一个 try-catch 块与类似 Either 的 monad 结合时,可以解释为 monad 吗?
- node.js - 为什么 AWS Elastic Beanstalk 在运行 `assets:precomile` 时部署失败,因为它在 SSH 上运行时“进程内存不足”?