解析服务器阻止自动添加字段

时间:2018-03-30 04:43:33

标签: parse-platform parse-server

现在,如果我将一个字段添加到Parse对象然后保存它,新列将显示在Parse仪表板中。

例如,在运行之后:

let media = new Parse.Object("Media");
media.set("foo", "bar");
await media.save();

我将有一个名为foo的新专栏。

是否可以防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

您必须为每个类添加一个beforeSave触发器,保留所有键的架构,迭代from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup import gzip url = 'https://www.ccna8.com/ccna4-v6-0-final-exam-full-100-2017/' uClient = uReq(url) page_html = gzip.decompress(uClient.read()) uClient.close() page_soup = soup(page_html, "lxml") print(page_soup) 的键,然后查看是否有任何不属于您的键架构。然后,您可以取消设置并调用request.object,也可以调用response.success()完全阻止保存,最好使用指示违规字段的消息。

response.error()

编辑:

由于这引起了一些注意,我想我会补充一点,你可以获得你班级的当前架构。来自文档:https://docs.parseplatform.org/js/guide/#schema

const approvedFields = ["field1", "field2", "field3"];

Parse.Cloud.beforeSave("MyClass", function(request, response) {
    let object = request.object;
    for( var key in object.dirtyKeys() ) {
        if( approviedFields.indexOf(key) == -1 ) return response.error(`Error: Attempt to save invalid field: ${key});
    }
    response.success();
});

目前尚不清楚这是否异步(你必须自己测试一下,一旦你知道就随意评论更新答案!)

但是,一旦拥有了模式,它就有一个fields属性,它是一个对象。检查链接是否有这些外观。

您可以通过迭代它的键来验证对象,并查看schema.fields是否具有该属性:

// create an instance to manage your class
const mySchema = new Parse.Schema('MyClass');

// gets the current schema data
mySchema.get();

对于刚刚从最新版本的Parse-Server开始的任何人来说,请求方案已更改为不再使用响应对象。你只需返回结果。所以,记住这一点。

答案 1 :(得分:0)

是的。可以使用class-level permissions完成此操作,这样可以防止将字段添加到类中。

通过解析,您可以指定每个类允许的操作。这样,您就可以限制客户端访问或修改类的方式。

...

添加字段:解析类具有在创建对象时推断出的架构。在开发应用程序时,这很棒,因为您可以向对象添加新字段,而无需在后端进行任何更改。但是,一旦您发布了应用程序,很少需要自动将新字段添加到您的课程中。当您向公众提交应用程序时,应该几乎总是关闭所有课程的权限。