问题描述
我刚刚花了几个小时评估 CloudKit 的共享功能,用于潜在的多租户应用程序,虽然我认为我知道答案,但我觉得我应该询问社区。em>
用例:支持多个公司的应用,每个公司都有自己的用户,这些用户只能访问该公司内部的共享数据(记录)。想象一下 Slack 的独立工作区:A 公司的用户应该能够看到 A 公司的所有数据,也许最终 A 公司雇佣了一名新员工(用户),他也应该看到相同的数据。 B 公司拥有完全独立的用户/数据,A 公司的任何人都不会看到。
问题:根据我目前对 CloudKit 的理解,记录与用户相关联,而不是公司/团队/组。如果用户 A(公司 A)与用户 B 共享一条记录,这是完全可行的,用户 B 将看到所有内容(包括子记录)。但是现在让我们假设用户 A 离开了公司。另一个用户如何获得这些记录的所有权,以便用户 B 可以继续访问公司的数据?
似乎每家公司都需要拥有自己的 iCloud 帐户才能充当主“所有者”,这对于非技术人员来说理解起来不专业或具有挑战性(并且随后与未来用户共享变得复杂)。
>我想错了吗?将 CloudKit 视为此应用的后端,我是否已经走错了树?
解决方法
我认为最适合您所描述的设置是在 CloudKit 容器中使用 Public
数据库。可以根据需要共享和“拥有”CKRecord
。所有可以访问数据库的人都可以使用该记录。
通过 CKRecord
功能共享 CKShare
的限制要大得多。以这种方式共享时,您只是向某人的 Private
数据库提供共享视图。如果该用户消失,则共享记录随之消失,共享停止。只有 Public
数据库可以保留与用户状态无关的记录。
一个警告是,Public
数据库必须由一个 Apple Developer 帐户拥有。您不能在业务级别跨公司共享所有权。但对于您的应用而言,您的开发者帐户可以拥有数据库,并且您可以根据需要与任意数量的租户共享数据。
如果您有任何后续问题,请告诉我。