适用于 Moralis.User
的相同安全模型可以应用于其他对象。 对于任何对象,您可以指定允许哪些用户读取和/或修改该对象。 为了支持这种类型的安全性,每个对象都有一个访问控制列表,由 Moralis.ACL
类实现。
使用 Moralis.ACL
的最简单方法是指定对象只能由单个用户读取或写入。 这是通过使用 Moralis.User
初始化 Moralis.ACL
来完成的:new Moralis.ACL(user)
生成一个 Moralis.ACL
,限制对该用户的访问。 与任何其他属性一样,保存对象时会更新对象的 ACL
。 因此,要创建一个只能由当前用户访问的私人笔记:
const Note = Moralis.Object.extend("Note");
const privateNote = new Note();
privateNote.set("content", "This note is private!");
privateNote.setACL(new Moralis.ACL(Moralis.User.current()));
privateNote.save();
然后,只有当前用户可以访问此注释,尽管该用户登录的任何设备都可以访问它。此功能对于您希望跨多个设备访问用户数据的应用程序很有用,例如个人待办事项。
也可以按用户授予权限。 您可以使用 setReadAccess
和 setWriteAccess
将权限单独添加到 Moralis.ACL
。 例如,假设您有一条消息将发送给由多个用户组成的组,其中每个用户都有权阅读和删除该消息:
const Message = Moralis.Object.extend("Message");
const groupMessage = new Message();
const groupACL = new Moralis.ACL();
// userList is an array with the users we are sending this message to.
for (let i = 0; i < userList.length; i++) {
groupACL.setReadAccess(userList[i], true);
groupACL.setWriteAccess(userList[i], true);
}
groupMessage.setACL(groupACL);
groupMessage.save();
您还可以使用 setPublicReadAccess
和 setPublicWriteAccess
一次向所有用户授予权限。 这允许在留言板上发表评论等模式。 例如,要创建一个只能由其作者编辑但任何人都可以阅读的帖子:
const publicPost = new Post();
const postACL = new Moralis.ACL(Moralis.User.current());
postACL.setPublicReadAccess(true);
publicPost.setACL(postACL);
publicPost.save();
被禁止的操作(例如删除您没有写入权限的对象)会导致 Moralis.Error.OBJECT_NOT_FOUND
错误代码。 出于安全目的,这可以防止客户端区分哪些对象 ID 存在但受到保护,哪些对象 ID 根本不存在。