2

是否有推荐的做法或框架来使用 google-app-engine db.Model (和/或 ndb.Model) 实现记录级别权限和属性级别可见性?

我已阅读有关模型挂钩的信息,但我很想看看是否有现有的推荐最佳实践来执行此操作。

class Person(db.Model):

 first_name = db.StringProperty()
 last_name = db.StringProperty()
 city = db.StringProperty()

 # Record level permissions:
 #  "top" visible only to managers
 #  "medium" visible to managers & supervisors
 #  "none" visible to all (unless other permissions restrict)
 secrecy = db.StringProperty(required=True, choices=set(["top", "medium", "none"]))

 birth_year = db.IntegerProperty() # Accessible only with "Manager" permission
 height = db.IntegerProperty() # Writable only with "Supervisor" permission

对此的更多上下文 - 我需要这些权限检查是模型级别的,因为我希望允许用户通过简单的 JavaScript RPC 调用执行任意 GQL 查询和 DML。

4

1 回答 1

1

对于实体级(=记录级)权限,您应该查看Namespaces API。Afaik,没有针对属性级别权限的开箱即用解决方案 - 您必须自己编写代码。

请注意,命名空间通过将命名空间添加到实体键来工作。这意味着您将无法进行跨命名空间查询并获得一个您需要知道它的命名空间的实体(以及种类、父级和 id/name)。

命名空间是实现多租户的一种有效方式,例如让完全不同的客户使用相同的 GAE 应用程序,防止代码错误将一个客户的数据暴露给另一个客户的可能性。

于 2013-02-08T20:53:43.487 回答