Flask-Potion + Flask-Principal 锁定用户资源

Flask-Potion + Flask-Principal Locking down User Resource

我正在学习 Flask-potion 教程并尝试保护我的 api。我一直在试图弄清楚如何在用户端点上设置权限,以便用户无法查看另一个用户的记录。这是我的代码:

class UserResource(PrincipalResource):
    class Meta:
        model = User
        permissions = {
            'read': 'id'
        }

class ArticleResource(PrincipalResource):
    class Schema:
        author = fields.ToOne('user')

class Meta:
    model = Article
    read_only_fields = ['author']
    permissions = {
        'create': 'editor',
        'update': ['user:author', 'admin']
    }

我需要自定义权限才能执行此操作吗?这似乎是一种常见的情况。

Flask-Principals 中的所有 "needs" 都是元组。您编写的 UserResource {'read': 'id'} 的权限配置与 RoleNeed ('role', 'id') 相匹配。您想要匹配 ('id', user_id) 之类的内容。不幸的是,目前不支持。

但是您可以匹配的是 ItemNeed,例如('read', user_id, 'user')。要匹配该 ItemNeed,请将您的权限配置设置为 {'read': 'read'},然后在加载您的身份时,只需像这样添加项目权限:

identity.provides.add(ItemNeed('read', current_user.id, 'user'))