Сделать 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",
],
},
},
]
Я не добавил число в конце. Если он нужен, я бы предложил добавить код для создания случайного числа, а затем построить строку с ним в конце. Иначе число и имя пользователя могут быть функционально эквивалентны, и пользователь перестанет быть анонимным.