是否有推荐的做法或框架来使用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。
答案 0 :(得分:1)
对于实体级(=记录级)权限,您应该查看Namespaces API。 Afaik,没有针对属性级别权限的开箱即用解决方案 - 您必须自己编写代码。
注意,名称空间的工作原理是向实体键添加名称空间。这意味着您将无法进行跨命名空间查询并获得一个实体,您需要知道它的命名空间(以及种类,父级和ID /名称)。
命名空间是实现多租户的有效方式,例如让完全独立的客户使用相同的GAE应用程序,防止代码错误将一个客户的数据暴露给另一个客户。