python - 是否有推荐的做法或框架来实现 google-app-engine db.Model/ndb.Model 的记录级权限)?

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

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

我已经阅读了有关模型 Hook 的内容,但我很想看看是否有现有的推荐最佳实践来执行此操作。

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。

最佳答案

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

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

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

关于python - 是否有推荐的做法或框架来实现 google-app-engine db.Model/ndb.Model 的记录级权限)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780599/

相关文章:

java - App Engine 和多个管理员用户?

java - Google App Engine 无法在 Eclipse 中启动

jquery - 如何让 jQuery 和 Python 在 GAME 应用程序中来回发送数据

docker - 有没有办法限制 Docker 中用户的容器访问?

MySQL授予数据库除一张表之外的所有权限

python - 如何选择行并替换 Pandas 中的某些列

python - 记录到不同级别的控制台和文件的记录器

python - 线性回归实现中的问题

python - 如何将数据分离到 pandas 中的不同变量中

r - 从 R 检查文件权限