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

时间:2015-11-25 19:29:53

标签: flask flask-login flask-potion

我正在关注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']
    }

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

1 个答案:

答案 0 :(得分:2)

Flask-Principals中的所有“需求”都是元组。您编写的UserResource {1}}的权限配置与 RoleNeed ('role', 'id')匹配。您希望匹配('id', user_id)之类的内容。不幸的是,目前不支持。

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

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