Существует ли рекомендуемая практика или структура для достижения разрешения на уровне записи для google-app-engine db.Model/ndb.Model)?

Существует ли рекомендуемая практика или структура для обеспечения видимости разрешений на уровне записи и уровня атрибутов с помощью движка 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

Еще немного контекста: мне нужно, чтобы эти проверки разрешений были на уровне модели, поскольку я хочу, чтобы пользователи могли выполнять произвольные запросы GQL и DML с помощью простого вызова JavaScript RPC.


person anups    schedule 08.02.2013    source источник


Ответы (1)


Для разрешений на уровне объекта (= уровня записи) вы должны изучить API пространств имен. Afaik, не существует готового решения для разрешений на уровне свойств - вам придется кодировать это самостоятельно.

Обратите внимание, что пространства имен работают путем добавления пространства имен к ключу сущности. Это означает, что вы не сможете выполнять запросы между пространствами имен, и для получения объекта вам необходимо знать его пространство имен (вместе с видом, родителем и идентификатором/именем).

Пространства имен — это эффективный способ достижения мультиарендности, например. способ сделать так, чтобы совершенно разные клиенты использовали одно и то же приложение GAE, предотвращая возможность того, что ошибка кода может привести к раскрытию данных одного клиента другому клиенту.

person Peter Knego    schedule 08.02.2013
comment
Спасибо, но, как вы указали, пространства имен лучше всего использовать для мультитенантности, и я намерен использовать их для того же. - person anups; 09.02.2013