2

是否有推荐的实践或框架来实现记录级权限和属性级可见性与谷歌应用程序引擎db.Model(和/或ndb.Model)?是否有推荐的实践或框架来实现谷歌应用程序引擎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调用执行arbitary GQL查询和DML的。

回答

1

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

注意,名称空间通过向实体键添加名称空间而起作用。这意味着你将无法进行交叉命名空间查询并获得需要知道其名称空间的实体(以及kind,parent和id/name)。

命名空间是实现多租户的有效方法,例如,一种完全独立的客户使用相同的GAE应用程序的方法,防止代码错误可能会将一位客户的数据暴露给其他客户的可能性。

+0

谢谢,但正如您所指出的那样 - 命名空间最适用于多租户,我打算将其用于相同的情况。 – anups 2013-02-08 20:58:35

相关问题