在 gundb 中私有写入和 public 读取

private write and public read in gundb

我想创建一个 microblog,每个人都可以阅读所有 post,但只有所有者可以删除或编辑 post。在 gundb 没有 sea 每个人都可以编辑或删除 posts,在 sea( gun.user()) 我必须共享 public 密钥,在 sea 我如何获得所有用户的 post 和在时间轴中显示 posts?

我如何用 gundb 创建这个?

每次创建用户时,public 密钥可以与所有其他用户共享。 (有一个维护列表的超级用户)然后您的 front-end 网站将遍历所有 public 键以获取人们发布的所有帖子并显示它们。这样,人们可以阅读所有帖子,但不能编辑。另一种方法是让超级用户 运行 一个不断索引和 'copies' 发布到他自己的图表中的进程,并且该图表可以被查看。 (让它更受保护) 这是非常高层次的答案,但所有这一切都可以使用 gun.user() 和枪支核心结构。

说 todo-dapp 是 public read user only write 是一种误导,它实际上并没有为您提供查看其他用户文档的能力。

事实上,long-term 令我恼火的是,实际上没有关于如何执行此操作的文档或示例,当您询问开发人员时,您只会面临一次又一次的逃避。

数据库只有在有办法将用户关注点彼此分开时才有用

我一直在 gun 中寻找有关数据隐私问题的答案,这是我的答案:

  1. 变量的导入和定义
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gun/sea.js"></script>

var gun = Gun()
  1. 创建微博第一作者
gun.user().create('firstMicroblogAuthor', 'somePassword')
gun.user().auth('firstMicroblogAuthor', 'somePassword')

  1. 创建post并获取作者
var post = {
  title: 'First post',
  text: 'Hello world!'
}

var author = gun.get('~@firstMicroblogAuthor') // There should be the same `username` in Step 2
  1. 保存post
gun
  .user()
  .get('posts')
  .set(post) // At this step, we saved the post in a user schedule, which by default is only writable by the user
  .once(function() {
    this.get('author').put(author) // In this step, we link our post with the author (with our user)
    gun.get('posts').set(this) // At this step, we save the post with the author installed in the main graph
  })
  1. 检查我们的 post 是否受到其他用户的编辑保护:
gun.user().leave()

gun.user().create('secondMicroblogAuthor', 'somePassword')
gun.user().auth('secondMicroblogAuthor', 'somePassword')

gun
  .get('posts') // Read posts from public graph
  .once(function() {
    this.get('text').put('Goodbye world!') // In this case, we will get an error, because this post was protected
  })