阅读(3493) (0)

Moralis 其他对象的安全性

2022-05-09 13:37:30 更新

适用于 ​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 根本不存在。