python - guardian - django user model
Cómo crear grupos personalizados en django del grupo (0)
Estoy tratando de descubrir cómo crear grupos personalizados en Django, de forma tal que los grupos estén relacionados con la aplicación y no con un Proyecto.
Por ejemplo, cuando un usuario desea crear una empresa, debe ser el propietario de la empresa:
modelo
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"),
)
ver
# 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})
Aquí las preguntas:
1) En lugar de tener Group.objects.get_or_create(name="erp_admin")
me gustaría tener CompanyGroup.objects.get_or_create(name="admin")
de forma que los grupos de una aplicación estén restringidos a la aplicación.
2) ¿Cómo puedo asignar los permisos definidos en la clase Meta de cada modelo a un grupo?
3) Los grupos personalizados están relacionados con una empresa, esto significa que cada empresa tiene el grupo Admin, que comienza con el propietario. El propietario puede crear usuarios como "Administrador". El administrador puede crear grupos / permisos, agregar usuario, establecer permisos para el usuario pero no puede, de todos modos, CRUDAR los grupos de administradores. Entonces, hay un tipo de jerarquía en los grupos (supongo que la jerarquía depende de los permisos que se agregan a un grupo).
Para hacerlo más claro, aquí puede ver una imagen del concepto:
Entonces creo que los principales problemas son:
1) Cómo heredar grupos para crear grupos personalizados.
2) Cómo asignar los permisos de un modelo a un grupo.
3) Cómo se pueden restringir los grupos a un ID de empresa.
Espero que el problema esté bien definido. Avísame si tengo que aclarar algo.
Gracias de antemano por el apoyo.
Editar 1)
Para el punto 3 encontré esta respuesta en SO: Extienda los grupos y permisos de django, pero el problema es cómo consultar esos datos y cómo verificar los permisos. ¿Y cómo podría anular el método save () para agregar metainformación a la propiedad ''nombre''? El nombre del grupo podría ser algo como: "company_id # admin" o "company_id # manager".