【问题标题】:Is there a recommended practice or framework to achieve record-level-permission for google-app-engine db.Model/ ndb.Model)?是否有推荐的做法或框架来实现 google-app-engine db.Model/ndb.Model 的记录级别权限?
【发布时间】:2013-01-24 16:37:43
【问题描述】:

是否有推荐的做法或框架来使用 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。

【问题讨论】:

    标签: python google-app-engine user-permissions database-permissions


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,但正如您所指出的 - 命名空间最适合用于多租户,我打算将其用于相同的目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2015-01-08
    相关资源
    最近更新 更多