У пользователей есть отдельные профили, где я пытаюсь ограничить их доступ к их индивидуальному профилю, в то же время позволяя пользователям в группе администраторов получать доступ ко всем профилям.
В идеале я надеялся сделать это с помощью декоратора 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)