Django admin добавление записи в определенные группы
Hej!
Я ищу возможность добавлять записи от разных пользователей и групп. В моем приложении есть различные пользователи и различные группы, где один пользователь может принадлежать к нескольким группам. Цель состоит в том, что некоторые из групп содержат конфиденциальные данные, поэтому я хочу, чтобы только члены этой группы могли читать записи, но некоторые данные должны быть доступны в нескольких группах. Также должна быть возможность просматривать только некоторую информацию. (например, видеть имя, но не адрес)
На данный момент у меня есть декоратор @login_required
для всех моих представлений и @permission_required
для представления person_view. Поэтому вы должны быть зарегистрированным пользователем, чтобы увидеть что-либо, что замечательно, но не достаточно.
Я также создал группы (через область администратора), но не могу фильтровать данные для каждой модели/представления. Группа либо видит данные, либо нет.
Регистрация пользователей подключена к уже существующей системе ldap (где эти группы заранее определены. Было бы здорово использовать их!)
Есть ли возможность добавлять записи только для специальной группы и просматривать только часть данной информации?
Спасибо за помощь!
Если вы хотите ограничить или задать представление для группы, вам следует использовать два миксина: UserPassesTestMixin и LoginRequiredMixin.
LoginRequiredMixin
просто убедится, что пользователь в запросе вошел в систему .
UserPassesTestMixin
будет проверять запрос по определенному нами булевому выражению и если оно вернет True, то впустит пользователя
Мы можем настроить это с помощью метода test_func
, который будет возвращать либо True, либо False.
Вот пример, который вы можете использовать в своем представлении
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
class Index(LoginRequiredMixin, UserPassesTestMixin,View):
def get(self, request):
return render(request, 'nioulboy/index.html')
def test_func(self):
return self.request.user.groups.filter(name='Admin')
В методе test_func мы возвращаем true, если у request.user
есть группа с именем Admin
.
Если возвращается True, это позволит пользователю просмотреть index page
, если возвращается False, это отправит обратно 403 error
.
для НЕ основанных на классах представлений работает эта функция, чтобы дать разрешение всему представлению.
# views.py
from django.contrib.auth.decorators import login_required, user_passes_test
def user_check(user):
return user.groups.filter(name="Admin")
@user_passes_test(user_check)
@login_required
def view(request):
....