现在,如果我将一个字段添加到Parse对象然后保存它,新列将显示在Parse仪表板中。
例如,在运行之后:
let media = new Parse.Object("Media");
media.set("foo", "bar");
await media.save();
我将有一个名为foo
的新专栏。
是否可以防止这种情况发生?
答案 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完成此操作,这样可以防止将字段添加到类中。
通过解析,您可以指定每个类允许的操作。这样,您就可以限制客户端访问或修改类的方式。
...
添加字段:解析类具有在创建对象时推断出的架构。在开发应用程序时,这很棒,因为您可以向对象添加新字段,而无需在后端进行任何更改。但是,一旦您发布了应用程序,很少需要自动将新字段添加到您的课程中。当您向公众提交应用程序时,应该几乎总是关闭所有课程的权限。