Как создать пользовательские группы в Django из группы

Я пытаюсь выяснить, как создавать пользовательские группы в Django таким образом, чтобы группы относились к приложению, а не к проекту.

Например, когда пользователь хочет создать компанию, он должен быть владельцем компании:

модель

class Company(models.Model):
    owner = models.ForeignKey(User)
    name = models.CharField(max_length=64, unique=True)
    description = models.TextField(max_length=512)
    created_on = models.DateTimeField(auto_now_add=timezone.now)

    class Meta:
        permissions = (
            ("erp_view_company", "Can see the company information"),
            ("erp_edit_company", "Can edit the company information"),
            ("erp_delete_company", "Can delete the company"),
        )

Посмотреть

# Create your views here.
def register(request, template_name='erp/register.html'):
    if request.method == 'POST':
        company_form = CompanyRegistrationForm(request.POST)
        if company_form.is_valid():
            # Create a new company object but avoid saving it yet
            new_company = company_form.save(commit=False)
            # Set the owner
            if request.user.is_authenticated():
                new_company.owner = request.user

            # Add the user to group admin
            group = Group.objects.get_or_create(name="erp_admin")
            request.user.groups.add(group)

            # Save the User object
            new_company.save()

            template_name = 'erp/register_done.html'
            return render(request, template_name, {'new_company': new_company})

    else:
        company_form = CompanyRegistrationForm()

    return render(request, template_name, {'company_form': company_form})

Здесь вопросы:

1) Вместо того, чтобы иметь Group.objects.get_or_create(name="erp_admin") Я хотел бы иметь CompanyGroup.objects.get_or_create(name="admin") таким образом, что группы приложения ограничены приложением.

2) Как можно сопоставить разрешения, определенные в мета-классе каждой модели, с группой?

3) Пользовательские группы связаны с Компанией, это означает, что в каждой компании есть группа Администратор, которая начинается с владельца. Владелец может создать пользователя как "Менеджер". Менеджер может создавать группы / разрешения, добавлять пользователя, устанавливать разрешения для пользователя, но в любом случае не может проверять группы администраторов. Так что в группах есть своего рода иерархия (я полагаю, что иерархия зависит от разрешений, добавляемых в группу).

Чтобы сделать это более понятным, вы можете увидеть картину концепции: пример компании

Поэтому я думаю, что основными проблемами являются:

1) Как наследовать группы для создания пользовательских групп.

2) Как сопоставить разрешения модели с группой.

3) Как группы могут быть ограничены идентификатором компании.

Я надеюсь, что проблема хорошо определена. Дайте мне знать, если мне нужно что-то уточнить.

Заранее спасибо за поддержку.

Редактировать 1)

Для пункта 3 я нашел этот ответ в SO: Расширение django Groups и Permissions, но проблема в том, как запросить эти данные и как проверить разрешения. И как можно переопределить метод save(), чтобы добавить метаинформацию к свойству name? Имя группы может быть что-то вроде: "company_id#admin" или "company_id#manager".

1 ответ

Возможно, вы ищете Per Permissions. Django не поддерживает это из коробки, но это возможно с приложением Django-guardian

Другие вопросы по тегам