Eve框架:用户限制资源访问

时间:2017-05-09 21:52:56

标签: python authentication eve

我正在使用Eve框架,我正在尝试使用User-Restricted资源访问,如下所述: http://python-eve.org/authentication.html#user-restricted-resource-access

我正在做类似的事情:

class CustomAuth(TokenAuth):
    def check_auth(self, token, allowed_roles, resource, method):
        # Get user as an instance of UserResource.
        if user and hasattr(user, 'id'):
            self.set_request_auth_value(user['id'])
        request.authenticated_user = user
        ...

所以,我身边有一些问题:

  • 使用用户限制资源访问是否足够?
  • 此字段如何添加到用户创建的对象中?
  • 我的用户创建的对象中是否有另一个名为id的字段?是否可以重命名?
  • 据我了解,它的名称应与用户资源中的名称相同。这是真的吗?
  • 此字段(属性)是否仅适用于新创建的对象?是否可以按照这种方式由当前用户获取以前创建的对象?

好吧,我想知道我的问题的答案+澄清它是如何使用的。

这是在我的钩子中以某种方式提取它的预期方法吗?

user_id = current_app.auth.get_request_auth_value()
current_app.data.driver.session.query(resource).find({'id': user_id})

这个代码块是否符合预期? 如果我请求的资源有自己的id字段,它的行为如何?

P.S。我正在读一篇文章: https://stackoverflow.com/a/35654252/7335432

1 个答案:

答案 0 :(得分:0)

用户限制访问功能可防止用户访问他们未创建的记录。 set_request_auth_value()方法执行:

1)在发出创建记录的POST请求时,它会自动添加指定为AUTH_FIELD的字段(如果您只想对特定资源执行,则添加auth_field)。例如,如果您在settings.py中声明

AUTH_FIELD = "my_auth_field"

然后添加

set_request_auth_value(user['id'])

到您的身份验证方法,这意味着您的应用会创建一个字段" my_auth_field"将其值设置为任何用户[" id"]。因此,如果你要进入Mongo Compass或其他一些DBMS并手动检查你的记录,你就会看到一个" my_auth_field"在那里的领域。

2)在您访问这些记录时,在GET请求中,Eve检查" my_auth_field"任何用户[" id"]的价值,只显示" my_auth_field"等于用户[" id"]。由于使用Eve创建记录时会自动添加此字段,因此它会有效地过滤掉特定用户未创建的所有内容。

所以是的,它只适用于新创建的对象。我不确定你的意思是什么"它是否足够",但它看起来并不像用户'在身份验证类中的任何位置声明。您可能希望检查this tutorial他们确实将用户限制访问合并到令牌身份验证中。