Использование user_passes_test Ограничить доступ для просмотра по группе или вошедшего в систему пользователя - PullRequest
0 голосов
/ 30 июня 2019

У пользователей есть отдельные профили, где я пытаюсь ограничить их доступ к их индивидуальному профилю, в то же время позволяя пользователям в группе администраторов получать доступ ко всем профилям.

В идеале я надеялся сделать это с помощью декоратора user_passes_test с одной функцией.При необходимости я мог бы использовать две разные функции с декоратором для каждой.Хотя объединение всего в одно может быть чище.


# Views.py

def profile_access(CustomUser, request):
    officer = CustomUser.groups.filter(name='Officer')
    logged_in_user = request.self.CustomUser
    if officer or logged_in_user:
        return True
    else:
        return redirect('homepage')


@user_passes_test(profile_access)
def profile(request, pk):
    # Profile content here

Я не уверен, как определить вошедшего в систему пользователя, чтобы ограничить его только своим профилем, а также разрешить пользователям в группе «Офицеры» видеть все профили.

Обновление:


# accounts models.py

class CustomUser(AbstractUser):
    display_name = models.CharField(max_length=50, unique=True)
    authorization_code = models.CharField(max_length=20)
    email = models.EmailField(max_length=50, unique=True)

    def __str__(self):
        return self.display_name

    def get_absolute_url(self):
        return reverse('profile-home', args=[str(self.pk)])


class Profile(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    active = models.BooleanField(default=True)
    officer = models.BooleanField(default=False)
    bio = models.TextField(max_length=1000)
    regdate = models.DateField(default=date.today)
    active_player = models.BooleanField(default=True)
    clan_battle_status = models.BooleanField(default=False)
    captain = models.ManyToManyField(ShipCaptain)
    ships = models.ManyToManyField(NavalShip)

    def __str__(self):
        return str(self.user)

1 Ответ

0 голосов
/ 30 июня 2019

В этом коде есть несколько ошибок, но в любом случае это не то, что вы могли бы сделать в функции user_passes_test;запрос не передан, поэтому невозможно определить, имеет ли пользователь доступ к своему профилю.

Сделайте это в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...