AntecedentesAdición de permisos por objeto django administrador
Estoy desarrollando una aplicación Django para un sitio de alquiler de vacaciones. Tendrá dos tipos de usuarios, inquilinos y administradores de propiedades.
Me gustaría que los administradores de la propiedad puedan administrar sus propiedades de alquiler en el administrador de django. Sin embargo, solo deberían poder administrar sus propias propiedades.
Me doy cuenta de que el administrador de django predeterminado no es compatible con esto. Me pregunto cuántos problemas sería agregar esta funcionalidad y, si es factible, cuál es la mejor manera de manejarla.
Meta
Lo ideal es que la imagen que funcione algo como esto:
auth
ya permite permisos de este tipo:
vacation | rental | Can add rental vacation | rental | Can change rental vacation | rental | Can delete rental
me gustaría cambiar esto a algo como:
vacation | rental | Can add any rental vacation | rental | Can change any rental vacation | rental | Can delete any rental vacation | rental | Can add own rental vacation | rental | Can change own rental vacation | rental | Can delete own rental
Posible solución
¿Cómo el marco decidir si el alquiler (o lo que sea) pertenece al usuario? Estoy pensando que comprueba la clase vacation.Rental
para ver si tiene un ForeignKey
a auth.User
(posiblemente con algún nombre particular, como 'propietario').
En la creación de un nuevo
vacation.Rental
, el valor del campoForeignKey
se verían obligados a ID del usuario actual. El campoForeignKey
no se mostraría en el formulario.En la lista de alquileres, solo se mostrarán los alquileres con
ForeignKey
que coincidan con el usuario actual.En los alquileres de cambio, solo se mostrarán los alquileres con
ForeignKey
que coincidan con el usuario actual. El campoForeignKey
no se mostraría en el formulario.
Por supuesto, esto debe ser capaz de funcionar para cualquier modelo que tenga un campo apropiado ForeignKey
, no sólo nuestro modelo vacation.Rental
.
¿Esto suena factible hasta el momento, o debería ir en una dirección diferente?
complicaciones
Ahora, aquí está la parte difícil; No estoy seguro de cómo manejar esto. Digamos que un Rental
puede tener muchas "RentalPhotos". RentalPhoto
tiene un ForeignKey
a Rental
.Los usuarios deberían poder agregar fotos a sus propios alquileres. Sin embargo, las fotos no tienen un usuario ForeignKey
, por lo que no hay forma de saber directamente a quién pertenece la foto.
¿Se puede resolver esto con algún truco en el marco, siguiendo a ForeignKey
s hasta encontrar un objeto con un ForeignKey
como usuario? ¿O debería tomar el camino más fácil y dar RentalPhoto
(y todo lo demás 'perteneciente' a Rental
) su propio ForeignKey
al auth.User
apropiado? El segundo enfoque invitaría redundancia innecesaria, el primero probablemente requeriría una sobrecarga de procesamiento innecesaria ...
Si me extravío por completo, no dude en señalarme en la dirección correcta. Gracias de antemano por cualquier ayuda.
Gracias, Anurag; no es tan genérico como me gustaría pero lo consideraré. ¿Cómo puedo atar esto a 'auth' para que mis nuevos permisos aparezcan en la lista? –
@no ver la edición. –