Как создать пользовательские группы в 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