解析新,请求社区反馈我是否正确设置了解析ACL和CLP安全性....
Parse Security似乎就是在其他安全层之上构建安全层。
我担心有人可以使用clientkey访问各种对象和他们的数据,除非我用ACL和CLP的....正确地锁定它
下面,我简要地概述了三个对象(_User, _Role和my FileUpload),相关的代码和关系。
我正在构建测试安全性的网站将使用户能够创建一个用户(在_User中)并将他们的文件上传到FileUpload对象。
<_User对象/strong>
从登录页面,我只想允许用户创建,用户表设置如下:-
- "public access" CLP设置只有"Create"权限,其他的都是禁用的。
- CloudCode afterSave在用户创建时设置新用户的ACL(代码如下)。
- CloudCode afterSave在用户创建时分配名为"signed"的角色给新用户。(代码如下,角色"签名"细节如下)
在CloudCode on User afterSave中,上述项目2和3的代码如下:-
Parse.Cloud.afterSave(Parse.User, function(request) {
if (!request.object.existed()) {
Parse.Cloud.useMasterKey();
var user = request.object;
if (user.existed()) { return; }
//2. set ACL on user
var acl = new Parse.ACL(user);
acl.setPublicReadAccess(false);
user.setACL(acl);
user.save();
//3. assign role "signed" to user
var roleQuery = new Parse.Query(Parse.Role);
roleQuery.equalTo("name", "signed");
roleQuery.first().then(function(role) {
role.getUsers().add(user);
return role.save();
});
}
});
<_Role对象/strong>
我在_Role中创建了一个名为signed的角色
- "signed"角色ACL设置为"Master Key Only"
- "public access" read &
- 在_Role中没有启用CLP(参见第2点),因此,不允许CRUD,但我不确定Parse如何允许"签名"角色工作。
FileUpload对象/strong>
设置该对象,以便用户只有在登录时才能将文件上传到FileObjects。
- 在FileUpload Object中存在一个指向User Object的指针。
- "public access" read & 为FileUpload对象写CLP被禁用。
- 为FileUpload对象添加了"signed" CLP。
- FileUpload Object中角色"signed"的CLP权限仅设置为"查找","创建","更新",这允许ACL设置为用户objectId
为了确保用户不能看到其他用户的文件加载,我在保存后对"FileUpload"设置了以下ACL。
Parse.Cloud.afterSave("FileUpload", function(request, response) {
var currentUser = Parse.User.current();
if(!currentUser) {
console.log('This is a user that is not logged in trying to upoad a file');
} else if (currentUser) {
var acl = new Parse.ACL(currentUser);
acl.setPublicReadAccess(false);
var user = request.object;
user.setACL(acl);
user.save();
response.success();
} else {
console.log('Cannot upload file');
}
});
这可能有点晚了,但我还是会给你我的反馈,因为还没有人回答。
首先,对于_User类,不需要设置这些acl,因为有Parse。用户默认具有公共读取和读写权限。因为您有一个仅创建的CLP,所以不需要显式地将公共访问设置为false,除非您计划在将来更改CLP。
第二,用于Parse。用户保存后,我建议只在需要时使用主密钥。因此,您可以在开头删除useMasterKey调用,只使用roleQuery.first调用它。
FileUpload afterSave有一个bug,我相信:你想设置请求。对象的ACL,而不是用户的ACL。