Django admin добавление записи в определенные группы

Hej!

Я ищу возможность добавлять записи от разных пользователей и групп. В моем приложении есть различные пользователи и различные группы, где один пользователь может принадлежать к нескольким группам. Цель состоит в том, что некоторые из групп содержат конфиденциальные данные, поэтому я хочу, чтобы только члены этой группы могли читать записи, но некоторые данные должны быть доступны в нескольких группах. Также должна быть возможность просматривать только некоторую информацию. (например, видеть имя, но не адрес)

На данный момент у меня есть декоратор @login_required для всех моих представлений и @permission_required для представления person_view. Поэтому вы должны быть зарегистрированным пользователем, чтобы увидеть что-либо, что замечательно, но не достаточно. Я также создал группы (через область администратора), но не могу фильтровать данные для каждой модели/представления. Группа либо видит данные, либо нет.

Регистрация пользователей подключена к уже существующей системе ldap (где эти группы заранее определены. Было бы здорово использовать их!)

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

Спасибо за помощь!

Если вы хотите ограничить или задать представление для группы, вам следует использовать два миксина: UserPassesTestMixin и LoginRequiredMixin.

  1. LoginRequiredMixin просто убедится, что пользователь в запросе вошел в систему
  2. .
  3. 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):
    ....

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