ios - 跨多个用户配置权限和共享 Realm

标签 ios swift permissions synchronization realm

我正在使用 Realm Swift 和 Realm 对象服务器作为我正在开发的应用程序的存储解决方案。我可以使用带有关系数据库的传统服务器,但我真的不需要服务器做任何实际工作。我真正需要的唯一后端只是存储和数据同步。 Realm 似乎提供了我想要的东西。

到目前为止,我有一个 Realm 的工作示例。我开始遇到的问题是访问控制。我觉得我可能对 Realm 可以为我提供什么存在根本性的误解,而且那里并没有很多很棒的资源。 Realm 文档非常详细,但没有最好的工作示例。

我的应用程序将用于跟踪一组可用球员的球队。球员的集合将是相对恒定和不变的。但是,团队会经常更换。考虑到这一点,我对我的 Realm 设置有以下想法:

  • 包含所有玩家集合的单一 Realm :/Players。每个用户都应该有这个 Realm 的读取权限,但只有管理员应该有写入和管理权限。
  • 应用程序 /~/MyRoster 的每个用户一个单独的 Realm 。该 Realm 应该由该用户读/写。我认为用户也应该能够授予其他用户对其 Realm 的临时读/写访问权限。
  • 多个用户应该能够组成一个团队,他们可以在其中阅读(并可能写入)所有团队用户的花名册。

这听起来像是可以接受的 Realm 后端使用方式吗?我应该如何管理中央共享数据池?我是否应该在用户注册后立即为他们创建一个 /~/MyRoster Realm ?我怎样才能按照我想要的方式配置权限?对我来说,权限结构似乎很奇怪。似乎我可以使用 PermissionOffer/PremissionOfferResponse 构造来实现我想要的 Realm 共享。

如有任何帮助,我们将不胜感激。

最佳答案

感谢您的详细记录。您提出的架构似乎很合适。以下是我的建议:

  1. 对于全局 /Players Realm ,我会在开发中创建它。今天这有点笨拙,因为您必须使用客户端 SDK 以管理员用户身份打开 Realm(因为只有管理员用户才能在其范围 /~/ 目录之外创建 Realms)。您可以在您的应用程序中创建一个代码路径,如果您以管理员身份登录,这将打开 /Players Realm ,然后对该 Realm 应用权限更改:
let permission = SyncPermissionValue(realmPath: "/Players",
                                 userID: "*", // To apply to all users
                                 accessLevel: .read)
user.applyPermission(permission) { error in
  if let error = error {
    // handle error
    return
  }
  // permission was successfully applied
}

此代码路径不需要运行多次。我们的计划是将这种功能添加到仪表板中的浏览器中,这样您就可以在不使用客户端 SDK 的情况下手动创建全局 Realm 并调整权限。

  1. 对于特定于用户的 Realms,您不需要立即创建它们,因为当用户最终需要时,Realms 会延迟创建。我的意思是 Realm 是这样设置的,你可以在客户端同步打开一个 Realm(启用离线优先功能),然后在客户端同步到服务器的第一次创建之后,服务器是否会真正意识到并且也在其中创建 Realm 。因此,您的客户端代码只需要设置为在必要时在 /~/MyRoster 打开 Realm。

    至于向其他用户授予权限,这将使用 Swift access control APIs将权限更改应用于用户的 Realm 并授予其他用户访问权限。这可以动态发生,以便用户可以授予权限,然后根据需要撤销权限。

  2. 对于关于组的第三部分,我将创建另一个全局 Realm /Group,它对拥有组表示的所有用户具有读/写访问权限。例如,您可以有一个 Group 对象,其中包含一个链接到 User 对象的列表属性,在您的应用程序中每个用户有 1 个 User。这样每个用户都可以对 Realm 进行更改以代表他/她所属的组。

    您可以设置一个 Realm 函数来监听 /Group Realm 的变化,这样当一个用户被添加到一个组或被删除时,该函数将触发对各个 Realms 的必要权限更改在群里。

    现在,如果您担心对 /Group Realm 的访问控制,您可以设置一个 Realm Function,使用管理员用户将更改应用到 /Groups , 监听用户特定的 Realm /~/MyRequests ,用户可以在其中将对象写入此 Realm ,这将触发功能以对组 Realm 进行更改。通过这种方式,您可以防止未经授权的请求,并使 /Group Realm 对除管理员以外的所有用户保持只读状态。

关于ios - 跨多个用户配置权限和共享 Realm ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44705532/

相关文章:

linux - SVN 服务器仅允许以 root 身份运行时提交

ios - 今天小部件应用程序启动是 'over-sensitive'

ios - Objective - C 获取 CFBundleShortVersionString 的空白值 - 应用程序版本

json - 需要帮助使用 Alamofire 使用 Swift 解析 JSON

ios - 如何在控制中心显示 "live"(swift iOS)

django - nginx 权限在 Ubuntu 上被拒绝

android - protectionLevel "signature"是否适用于 Android 调试 key ?

ios - 调整旋转 UIView 的 subview 的大小

php - 我将数据上传到什么服务器名称和 postURL? -Xcode 到 mySQL 数据库

objective-c - 来自钥匙串(keychain)的 IKEv2 密码引用