feat: agrega rol 'publico' con UserProfile y permisos diferenciados
- Crea modelo UserProfile (OneToOne con User) con user_type: publico/user/administrator - Señal post_save que crea UserProfile automáticamente al crear User - UserSerializer.get_role() lee desde profile.user_type - Nuevos permisos: IsNotPublico, IsPublico y actualiza IsAdministrator - IsNotPublico restringe acceso a vistas de gestión (productos, clientes, ventas) - CatalogSaleView.create permite publico; otras acciones requieren IsNotPublico - UserProfile inline en admin de Usuarios - Data migration para backfill de usuarios existentes
This commit is contained in:
@@ -1,3 +1,19 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
# Create your models here.
|
||||
|
||||
class UserProfile(models.Model):
|
||||
USER_TYPE_CHOICES = [
|
||||
("publico", "Público"),
|
||||
("user", "Usuario"),
|
||||
("administrator", "Administrador"),
|
||||
]
|
||||
user = models.OneToOneField(
|
||||
User, on_delete=models.CASCADE, related_name="profile"
|
||||
)
|
||||
user_type = models.CharField(
|
||||
max_length=20, choices=USER_TYPE_CHOICES, default="user"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user.username} - {self.user_type}"
|
||||
|
||||
Reference in New Issue
Block a user