如何在Eve中实现字段级安全性?

时间:2017-08-29 00:33:28

标签: python eve

我正在使用Eve构建REST API并使用角色来保护特定端点,但除此之外,我还需要强制执行特定的字段级访问规则。我有一个基本的users端点,其中包含以下架构:

users = {
    'schema': {
        Schema.NAME: {
            'type': 'string',
            'minlength': 1,
            'maxlength': 32,
            'required': True,
            'unique': True
        },
        Schema.PASSWORD: {
            'type': 'string',
            'required': True
        },
        Schema.ROLE: {
            'type': 'string',
            'allowed': ['end user', 'manager', 'admin'],
            'required': True
        }
    },

端点具有公共POST访问权限,因此任何人都可以创建用户(即新用户可以创建自己的帐户)。最终用户可以更改自己的密码,经理可以更改最终用户的密码,管理员可以更改最终用户的角色。

我没有看到使用标准架构定义的方法。我还查看了Cerberus验证,但这似乎不支持跨多个文档的任何逻辑(即通过检查客户端是否经过身份验证管理{{1}来验证最终用户的user文档的修改})。

我通过添加事件挂钩实现了我想要的效果:

user

但是为了使请求失败,对请求内容进行捣乱是很麻烦的。有没有更好的方法来实施字段级安全性?或者如果没有,是否有更好的方法来使用事件挂钩来告诉服务器使请求失败?从钩子中引发异常确实导致请求失败,但异常在服务器上传播并且也不理想。

1 个答案:

答案 0 :(得分:0)

  

是否有更好的方法来强制执行字段级安全性?

据我所知,前夕没有机制支持字段级自定义访问控制。如果有,你会发现它。

我建议你尽可能改变你的设计。我认为最好将访问控制机制与前夕支持的CRUD操作分开。我的意思是,你可以开发一个服务器来控制访问。此访问控制服务器获取用户的所有请求,并在您的体系结构中扮演中介角色。然后,如果请求与访问控制规则(您在问题中提到)兼容,则请求将发送到 CRUD服务器(前夕服务器),并且可能影响您的数据库。

这种架构更简单,因为它将用户访问控制与CRUD操作分开并且可扩展,因为您将来可以添加更多访问控制规则。