Esta duda se puede solucionar de variadas maneras, sin embargo te damos la respuesta más completa en nuestra opinión.
Solución:
Los usuarios que no puedan agregar o cambiar, etc. un determinado modelo, no podrán verlo en el administrador.
Si estamos hablando de sus vistas personalizadas, entonces podría crear algo que verifique que un usuario tenga un permiso y devuelva un 404 si no tiene ese permiso. Los permisos están vinculados a los modelos y se pueden asignar varios permisos a un grupo.
Puede agregar un permiso a un modelo como este:
# myproject/myapp/models.py
class MyModel(models.Model):
class Meta:
permissions = (
('permission_code', 'Friendly permission description'),
)
Luego puede verificar si un usuario tiene un permiso como este:
@user_passes_test(lambda u: u.has_perm('myapp.permission_code'))
def some_view(request):
# ...
Usando permisos, puede agregarlos o eliminarlos fácilmente de usuarios y grupos simplemente usando la interfaz de administración.
Necesita administrar eso manualmente, pero es bastante fácil. Presumiblemente hay un attribute que determina si un grupo tiene o no permiso para ver una vista: entonces simplemente decora esa vista con el permission_required
decorador, si se trata de una simple cuestión de si el usuario tiene un permiso particular, o user_passes_test
si es un poco mas complicado:
@user_passes_test(lambda u: u.is_allowed_to_see_view_myview())
def myview(request):
...etc...
asumiendo que is_allowed_to_see_view_myview
es una especie de método en el objeto Usuario.
Los documentos de autenticación son bastante completos.
Para vistas basadas en clases, puede heredar UserPassesTestMixin
clase en la vista y definir test_func
from django.contrib.auth.mixins import UserPassesTestMixin
class MainView(UserPassesTestMixin, View):
def test_func(self):
return self.request.user.has_perm('app.get_main_view')
Eche un vistazo a estos documentos para obtener más detalles sobre cómo usar esto:
Recuerda algo, que puedes optar por la opción de añadir una evaluación objetiva si te ayudó.