Django: Создание разрешений, которые связывают два объекта User - PullRequest
0 голосов
/ 28 октября 2018

Есть ли способ настроить систему разрешений, в которой разрешения связывают вместе User объекты, т. Е. Где один User может иметь разрешение на чтение информации User (но не обязательно наоборот)?Я прочитал документацию, но она скудна, и, насколько я могу судить, разрешения не способны обрабатывать динамические сценарии использования.

В принципе, я хочу систему разрешений, которая определяет, что два + модели объектов могут «делать» длядруг друга.

Бонусные баллы, если у вас есть какие-либо сведения о том, как интегрировать это в Django Rest Framework.

1 Ответ

0 голосов
/ 30 октября 2018

Одним из подходов является переопределение класса BasePermission для создания вашего пользовательского разрешения.Вы можете указать разрешение доступа, используя дополнительное поле в модели User.

class UserPermission(BasePermission):   

    def has_permission(self, request, view):
        is_allowed_user = False
        try:
            permission = Permission.objects.get(user=request.user.id, user1=request.GET.get('user'))
            if permission.is_read_enabled:
                is_allowed_user = True
            else
                is_allowed_user = False
        except Permission.DoesNotExist as e:
            is_allowed_user = False        
        return is_allowed_user

Создание модели для указания разрешений

class Permission(models.Model):
    user = models.ForeignKey(User,...)
    user1 = models.ForeignKey(User,...)
    is_read_enabled = models.BooleanField(defualt=False)

Добавьте это разрешение для просмотра при необходимости.

...