- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看 this example使用javascript对博客系统进行建模,代码片段复制如下:
var user = Parse.User.current();
// Make a new post
var Post = Parse.Object.extend("Post");
var post = new Post();
post.set("title", "My New Post");
post.set("body", "This is some great content.");
post.set("user", user);
post.save(null, {
success: function(post) {
// Find all posts by the current user
var query = new Parse.Query(Post);
query.equalTo("user", user);
query.find({
success: function(usersPosts) {
// userPosts contains all of the posts by the current user.
}
});
}
});
它基本上创建了一个帖子对象,并将当前用户对象设置到它的 user
字段。要显示当前用户的所有博客文章,它会查询所有将 user
字段设置为当前用户的博客文章。
但由于默认情况下 User
表对所有用户都是只读的,这不会有问题吗,恶意用户 (X
) 可以创建随机帖子和“通过将这些帖子的 user
字段设置为 Y
来声称它们是由另一个用户 (Y
) 创建的,因为他从 用户
表?因此结果是,当系统显示用户 Y
的帖子时,除了 X
“伪造”的帖子之外,他还会看到他所有的真实帖子。
是否需要以某种方式对 User
表进行 ACL 缓解?但如果这是解决方案,那么为什么任意用户可以看到整个 User
表的默认行为是什么?
最佳答案
Cloud Code 是您的 friend 。
在这种情况下,您需要一个 beforeSave
处理程序,将 user
字段锁定到新对象上当前经过身份验证的用户,并在他们更新帖子时拒绝保存并尝试更改 user
字段(或者只是使用 ACL 来防止除帖子所有者之外的所有人修改帖子行)。
像这样:
Parse.Cloud.beforeSave('Post', function(request, response) {
var post = request.object;
var user = request.user;
if (post.isNew()) {
post.set('user', user);
response.success();
} else {
// any special handling you want for updates, e.g.:
if (post.dirty('user')) {
response.error('Cannot change the owner of a Post!');
} else {
response.success();
}
}
});
我推荐的处理诸如“帖子”之类的更新的方法是阻止所有更新。在数据浏览器中类的“设置权限”中,我将更改以下内容:
Update : Disabled
Delete : Disabled
要禁用某些功能,只需取消勾选“任何用户都可以执行此操作”。或者,您可能希望分配“管理员”或“版主”等 Angular 色,以允许这些人直接更新/删除项目。
只有在使用 useMasterKey()
时,这些功能才能通过 Cloud Code 实现,例如:
Parse.Cloud.define('deletePost', function(request, response) {
var postID = request.params.postID;
var query = new Parse.Query('post');
query.get(postID).then(function (post) {
if (post) {
// post found
var postOwner = post.get('user');
if (postOwner.id == request.user.id) {
// we let the owner delete their own posts
// NOTE: need to use the master key to modify/delete posts
Parse.Cloud.useMasterKey();
post.destroy().then(function () {
// TODO: delete all replies too?
response.success();
}, function (error) {
response.error(error);
});
} else {
response.error('Only the owner of a post can delete it!');
}
} else {
// post not found, might as well respond with success
response.success();
}
}, function (error) {
response.error(error);
}
});
关于javascript - Parse.com 安全 : can I save an object and claim it's another user's?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346707/
我是一名优秀的程序员,十分优秀!