当 Class 级别权限表示只有所有者可以创建 class 时,创建解析对象失败

Create Parse objects fail when Class Level Permission says only owner can create the class

问题描述

假设我有一个带有 textowner 属性 的 Parse "Diary class",其中 owner 是一个指针。

在仪表板上使用默认的 Class 级别权限(指针权限),我想任何人都可以创建新对象并声称它们由另一个随机用户拥有,如下所示:

curl -X POST \
  -H "X-Parse-Application-Id: myAppId" \
  -H "Content-Type: application/json" \
  -d '{"text":"hacked","owner": {"__type": "Pointer","className": "_User","objectId": "ANYTHING_THE_HACKER_WANT"}}' \
  http://server.com/parse/classes/Diary

于是尝试修改dashboard上的CLP,希望属于某个用户的日记只能由该用户创建。但是我无法让它工作。

重现步骤

1) 在 class 上配置 Class 级别权限,如下所示:

2) 尝试创建新对象,说它们归登录用户所有:

curl -X POST \
  -H "X-Parse-Application-Id: myAppId" \
  -H "Content-Type: application/json" \
  -H "X-Parse-Session-Token: r:4613f36ba383022378780d4c2bcdf1cd" \
  -d '{"text":"...","owner": {"__type": "Pointer","className": "_User","objectId": "CSosrTAkxL"}}' \
  https://server.com/parse/classes/Diary

预期结果

日记对象应该创建成功,因为调用它的人是所有者。 IE。会话令牌与所有者的 objectId 匹配?

实际结果

它 returns 错误改为:

{"code":119,"error":"Permission denied for action create on class Diary."}

为什么?我期待正确的行为吗?

选中 Public 的创建框。 CLP 的指针权限仅影响数据库 中的特定对象。由于这些对象尚不在数据库中,因此用户无法通过 CLP 来保存此对象,而无需从云代码中覆盖主密钥。选中创建框将意味着任何用户都可以创建这些对象之一,但他们必须是所有者才能更新或删除该对象。