在 Swift 的领域对象服务器上创建 public 个领域

Making public realms on Realm Object Server in Swift

我正在尝试创建一个所有用户都具有读取权限的 public 领域。领域团队在 this 网络研讨会中提到了此功能,但我找不到有关如何执行此操作的任何文档。

这是来自网络研讨会的一张漂亮的图片,它说明了可以在对象服务器中创建的领域类型。我无法找到如何制作 public 领域。

这里有做你想做的事的指导。请注意,自该网络研讨会推出以来,此功能已略有变化。 (我们还需要改进我们的文档,所以感谢您提出这个问题!)

  1. 创建管理员用户。您可以通过创建普通用户、转到 Web 仪表板并编辑用户使其成为管理员来完成此操作。如果用户是管理员,则在登录时其 isAdmin 属性 应该为真。

  2. 使用您的管理员用户,打开一个全局领域。全局领域是其路径不包含 ~ 的领域,例如 /myGlobalRealm/~/eachUserHasTheirOwnCopy。请注意,默认情况下,其他用户完全无法访问此领域。如果 Realm 还不存在,Realm 对象服务器将自动创建它。这将是您的 public 领域。

  3. 创建 RLMSyncPermissionValue 以授予所有用户读取权限。这意味着指定 public 领域 (/myGlobalRealm) 的路径,以及 *.

  4. 的用户 ID
  5. 然后用您的新权限值在您的管理员用户上调用-[RLMSyncUser applyPermission:callback:],并确保服务器正确设置权限。

  6. 尝试使用不同的用户打开您的 public 领域,并确保它可以正常工作。

希望对您有所帮助。

这里是写一个 public 领域的服务器函数:

const Realm = require('realm');
const server_url = 'realm://<Your Server URL>:9080'
const realmName = 'PublicRealm'
const REALM_ADMIN_TOKEN = "YOUR REALM ADMIN TOKEN"
const adminUser = Realm.Sync.User.adminUser(REALM_ADMIN_TOKEN);


var newRealm = new Realm({
    sync: {
        user: adminUser,
        url: server_url + '/' + realmName
    },
});

将代码粘贴到领域仪表板的函数编辑器中,然后将 运行 函数粘贴到创建 public 领域的函数中。您可以通过更改领域构造函数中的属性来修改 public 领域。

Swift 解决方案 您可以 运行 在您的模拟器中创建一个具有默认 read/write 权限的全局领域。

SyncUser.logIn(with: .usernamePassword(username: "ADMIN USERNAME", password: "ADMIN PASSWORD!"), server: URL(string: "Your Server URL")! { (user, error) in
            guard user != nil else{
                print(error)
                return
            }
            do{
                let globalRealm = try Realm(configuration: Realm.Configuration(syncConfiguration: SyncConfiguration(user: user!, realmURL: URL(string: "realm://<YOUR SERVER>:9080/GlobalRealm")!),  readOnly: false))
            }catch{
                print(error)
            }
            let permission = SyncPermissionValue(realmPath: "/GlobalRealm", userID: "*", accessLevel: SyncAccessLevel.write)
            user!.applyPermission(permission) { error in
                if let error = error{
                    print(error)
                }else{
                    user!.retrievePermissions { permissions, error in
                        if let error = error {
                            print("error getting permissions")
                        }else{
                            print("SUCCESS!")
                        }
                    }
                }
            }
        }