Смешивание разрешений на уровне системы и объекта в django

#django #django-rest-framework #django-guardian

#django #django-rest-framework #django-guardian

Вопрос:

Я использую django 1.6 с REST. Я пытаюсь включить разрешения на уровне объекта, а также на уровне системы в свое приложение. Немного почитав, я обнаружил, что django-gurdian это лучший способ (поскольку он отлично сочетается со всеми другими приложениями).

Я немного смущен тем, как разрешения на уровне системы и разрешения на уровне объекта обрабатываются вместе. Например,

 class Item(models.Model):
    ...
    class Meta:
        permissions = (
            ("item_create", "Can create an item") , # System privilege
            ("item_update", "Can update the item"), 
            ("item_delete", "Can delete the item"),
            ("item_read"  , "Can view the item")
        )
  

Я начал писать свое, permissions.py когда понял, что не совсем уверен в том, как тестировать item_create , учитывая, что у меня еще нет экземпляра элемента (и я не должен получать системные привилегии).).

Цените любые слова о разнице и / или о том, как управлять ими обоими и как они играют вместе.

Ответ №1:

  1. Для разрешений Guardian смотрите документ djano-guardian:http://django-guardian.rtfd.org /
  2. О системных разрешениях Django см.:https://docs.djangoproject.com/en/dev/topics/auth/default/#default-permissions

Вероятно, вы должны определить свои собственные методы, в которых выполняется проверка разрешений. Псевдокод:

 if is_system_permission(perm):
    user.has_perm(perm)
else:
    guardian.user_has_perm(object, perm)
  

Приветствия