我正在关注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']
}
我需要自定义权限才能执行此操作吗?这似乎是一种常见的情况。
答案 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'))