我想实现一项匹配功能,即A用户发布待售信息,B用户点击A用户的信息匹配。

问题是,要实现这一功能,待售信息对象的write权限需要公开,这似乎意味着任何人都可以删除这个对象。

我已经仔细阅读了LeanCloud文档的“数据与安全”一节,但仍然找不到解决方法。

请问我的理解在哪出了问题?有没有办法只将一个object的删除权限交给A用户?

为什么是公开 write 权限呢?read 应该就可以了。

当然可以在 object 的粒度上控制 ACL1代码样例

我想实现一项匹配功能,即A用户发布待售信息,B用户点击A用户的信息匹配。

问题是,要实现这一功能,待售信息对象的write权限需要公开,这似乎意味着任何人都可以删除这个对象。

不太清楚「匹配」具体是什么意思,是指 B 表示自己有购买意向,还是直接下单买下 A 出售的商品?我这里假定为购买意向。那么个人觉得比较简单直接的解决方案是这样的:

  • A 发布待售消息「XX」,该待售消息对象 ACL 为所有人可读,A 可写。
  • B 点击「匹配」,新增一个求购对象(求购对象中存一个 Pointer 字段,指向「XX」),该对象的 ACL 为所有人可读(或者,取决于具体场景,也可以设计为只有 A、B 两个人能够看到),B 可写。

谢谢大佬的解释。

我这几天着手实现你提到的方案,但是遇到了两个小问题:

  • 如果使用求购对象,那么A用户获取B用户的信息会变得比较麻烦。
  • A用户的库存信息无法更新。

目前,我对第一个问题的解决方案是:在A用户查看时,对每一个标记为“未匹配”的待售信息进行搜索,如果已经匹配则将结果缓存在一个字段中,同时修改匹配状态。是否有比较巧妙的方法?

然后第二个问题我想不出解决办法,望赐教。

是的,需要查询指向 A 发布的商品信息的未匹配求购对象,这是实现权限控制的代价。

库存信息其实和匹配状态的原理类似,每次查看库存时需要查询(为了减少查询请求,同样缓存状态)。另外,取决于场景,有减少查询请求的取巧方法,因为很多时候不一定需要非常精确的库存信息,比如:

  1. 对于 A 用户(卖家),查看库存信息时,进行查询,同时修改库存信息(A 有权限)。因为对卖家来说,库存信息比较重要(卖家可能需要根据库存信息决定是否补货,或者调整价格)。当然,如果想尽量减少查询,也可以展示待售信息的时候默认不显示库存信息,需要卖家点击一个按钮之类的才显示(这时进行查询)。
  2. 对于其他用户(买家),也许可以显示不精确的库存信息,比如「100+」、「库存充足」、「库存紧缺」等。或者,仅当库存低于特定数量时才显示精确数量,比如「仅剩 2 件」(如果想刺犹豫不决的买家下单)。

另外,如果不限定纯在客户端(前端、移动端)解决,可以使用 云引擎的 hook 函数1,在 B 求购时通过 hook 函数更新 A 的待售信息。