Сделать user.username (или любое другое поле) анонимным для определенных пользователей

Я пытаюсь сделать определенные атрибуты, связанные с PII, такие как user.username или profile_picture анонимными для определенных пользователей.

В моей базе данных есть поле cant_see_pii, которое отслеживает, может ли пользователь видеть конфиденциальные данные других пользователей.

class UserAttributes(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name = 'user_attribute')
    cant_see_pii = models.BooleanField(null=True, blank=True, default = False)
    profile_picture = models.ImageField("Profile Picture", default='images/default.svg', upload_to='images/', null=True, blank=True)

Если это поле истинно, я хочу замаскировать все данные, связанные с pii других пользователей, не скрывая свои собственные.

Пример: Когда шаблон имеет <H1>{{other_user.username}}</H1>, я хочу, чтобы он возвращал <H1>Anonymous User</H1> или даже лучше <H1>Anonymous User 12345</H1>

Я не хочу делать это для каждого случая, я использую это в каждом шаблоне, поэтому что-то вроде этого не будет работать: <H1>{% if userattribute.cant_see_pii == True %}Anonymous User{%else%}{{other_user.username}}{%endif%}</H1>

Это звучит как пример использования для контекстного процессора.

создайте файл custom_context_processors.py

def anonymise_others(request):
    if request.user.user_attribute.cant_see_pii:
        return {
           "other_user.username": "Anonymous User",
           "other_user.profile_picture": "images/default.svg"
        }

Затем включите его в список опций вашего settings.py TEMPLATES (в конце)

TEMPLATES = [
    {
        "BACKEND":, #blanked
        "DIRS": ,  #blanked
        "APP_DIRS":,  #blanked
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "myApp.custom_context_processors.anonymise_others",
            ], 
        },
    },
]

Я не добавил число в конце. Если он нужен, я бы предложил добавить код для создания случайного числа, а затем построить строку с ним в конце. Иначе число и имя пользователя могут быть функционально эквивалентны, и пользователь перестанет быть анонимным.

Вернуться на верх