2017-10-04 70 views
0

我使用带有Firebase数据库和PayPal的Ionic 3进行付款。在我的应用程序中,用户可以通过应用程序(市场)上的其他用户提供的贝宝列表进行购买。我遇到了需要为我的数据库实施的正确Firebase数据库规则的问题。Ionic3 + Firebase数据库安全性+ PayPal

一方面,当购买一个给定的列表时,买方需要将列表的状态更新为已售出(以便其他人再次购买)。另一方面,上市的所有者应被授权编辑他/她的列表。我现在有一些规则,这并不能真正解决我的困境。

"explore": { 
     ".read": "auth.provider === 'facebook'", 
     "$listing": { 
     ".write": "auth.provider === 'facebook' && ((!data.exists() && newData.exists()) || root.child('explore/'+$listing+'/UID').val() === auth.uid)", 
     } 
    }, 

也许有办法从Firebase函数的后端执行它?任何关于如何解决这个问题的建议将不胜感激!非常感谢!

+0

你现在的规则有什么问题?即什么行动(代码首选)被允许不应该(或反之亦然)? –

回答

1

您应该创建一个云端功能,执行付款处理并在付款成功时标记已售出的物品。例如,您可以为user-purchases/{uid}/{listing}创建一个onCreate事件侦听器,该触发器在触发时会尝试付款。

如果付款成功,则将交易ID连同任何其他购买特定信息一起写回user-purchases/{uid}/{listing},并使用firebase-admin将列表的状态设置为已售出,并执行任何其他相应操作。

否则,如果付款失败,请填写PayPal返回的错误消息。

+0

如何从后端调用PayPal插件?我正在使用本地插件http://ionicframework.com/docs/native/paypal/。有没有一种方法可以让用户/买方从前端调用PayPal,然后将返回的对象传递给云端功能以进一步处理并以管理员身份写入数据库? – Dimitri