1

我正在用 gundb 做一些第一步,它看起来不错。但是我很难想出一个我正在计划的应用程序需要的解决方案。

这实际上是一个非常常见的用例,应该有一组用户可以写帖子,但所有用户都应该能够阅读它们。

在文档中写了很多关于如何处理读取访问的内容,但我找不到任何关于如何处理对某些数据的写入访问的信息。

在某处有代码示例吗?枪一般如何处理写权限(一些文档/解释)?

4

1 回答 1

4

@gwildu 在 SEA(安全、加密、授权 - GUN 的权限框架)中使用公共读取的受限写入访问目前比进行私有读取访问更容易/测试版(尽管这已经完全可以直接使用 SEA 的较低级别的实用程序 API,此处的文档)。尽管我们正在努力改进易用性、抽象/API 和其他方面。

所以你需要知道的第一件事总结在这个相当简短的指南中:

https://gun.eco/docs/Auth

这将包括向您介绍 GUN 的加密概念以及创建和登录用户是多么容易。

下一步,您将看到对gun.user()对象的写入具有相同的 API,gun但自动将其默认为write-restricted(对于该用户,没有其他人可以篡改它)和public-read.

因此,从今天(2018 年 6 月 27 日)开始,您可以使用它来实现您想要的。您只需要知道您希望写信来自哪些用户,然后订阅它。使用一些额外的代码,你今天就可以做到这一点(点击https://gitter.im/amark/gun寻求帮助!)

将来,您可以期待这样的 API:

user.get('thingOthers').get('canWriteTo').trust(alice)

现在,当您订阅数据时,您会从您允许写入数据的人那里获得实时更新:

user.get('thingOthers').get('canWriteTo').on(data => console.log(data))

根据您的用例(可能还有稍微不同的 API,但希望不会),这也适用于其他读取您的数据的人。

例如,假设您是用户Bob(因此 Bob 添加 Alice 作为写入访问权限),并且某个第 3 方查看者说Carl想要读取 Bob 的数据,如果他们要:

bob.get('thingsOthers').get('canWriteTo').on(data => console.log(data))

它只会订阅那些允许写入数据的实时更新。

为什么这里有区别,您应该注意哪些细微差别?

A) 一个人可能想相信别人说的话,但不相信别人代表他们说话。

B)如果您确实信任某人代表您发言,那么观众(例如 Carl)现在必须信任授权人(Bob),Alice 可以说些什么。这可能会变得危险地集中!!!(从信任/许可模型来看,即使算法是 P2P/去中心化的,也就是 GUN。)

因此,虽然 (A) 的细微差别可能更难理解或管理,但它可能是更好的途径。(B) 更容易考虑,但可能会导致集中式权威(例如,世界上所有的 Carls 只信任 Bob 为他们做决定,而 Carls [使用 (A)] 会更好)决定他们认为谁应该有权力。)

例如,Bob 将 Alice 添加为写访问权限,但 Carl 也可以!这样一来,如果 Bob 和 Carl 在谁应该拥有写权限的问题上存在分歧,他们就不必相互信任!他们都会看到他们允许的东西,但看不到对方允许的东西。

显然,对于很多应用程序,每个人都“在同一页面上”并且让所有 Carls 都信任 Bob 来决定谁可以写入数据是有意义的。所以(B)仍然是一个不错的选择,只要知道其中的含义,并且知道还有其他的信任模型!

于 2018-06-27T19:34:11.903 回答