Pregunta

Desde el administrador veo que se pueden asignar permisos a un usuario o grupo de usuarios a:. Permitirá añadir, cambiar o borrado de datos a partir de un modelo

Eso es grande, pero también tengo que permitir que un grupo de usuarios de acceso o no a un grupo de puntos de vista de usuario o. Tengo cierto tipo de servicios en mi sitio web, por lo que quiero para permitir que algunos usuarios tener acceso a ciertos servicios (páginas / visitas), pero no en otros.

Entonces, ¿cómo puedo permitir que ciertos usuarios / grupos de usuarios el acceso a ciertos puntos de vista? ¡Gracias!

¿Fue útil?

Solución

Los usuarios que no pueden agregar o cambiar un determinado modelo, etc., no serán capaces de ver en el administrador.

Si estamos hablando acerca de sus puntos de vista personalizados creado entonces usted podría crear algo las que los controles de un usuario para un permiso y devuelve un 404 si no tienen ese permiso. Permisos están vinculados a los modelos y un grupo se pueden asignar varios permisos.

Se puede añadir un permiso a un modelo como este:

# myproject/myapp/models.py

class MyModel(models.Model):
    class Meta:
        permissions = (
            ('permission_code', 'Friendly permission description'),
        )

A continuación, se puede comprobar un si un usuario tiene permiso de esta manera:

@user_passes_test(lambda u: u.has_perm('myapp.permission_code'))
def some_view(request):
    # ...

El uso de permisos a continuación, puede añadir o eliminarlos de usuarios y grupos simplemente utilizando la interfaz de administración fácil.

Otros consejos

que necesita para gestionar manualmente, pero es bastante fácil. Es de suponer que hay un atributo que determina si un grupo tiene permiso para ver una vista: entonces sólo decorar ese punto de vista, ya sea con el decorador permission_required, si se trata de una simple cuestión de si el usuario tiene un permiso especial, o user_passes_test si es un poco más complicado:

@user_passes_test(lambda u: u.is_allowed_to_see_view_myview())
def myview(request):
    ...etc...

suponiendo que is_allowed_to_see_view_myview es algún tipo de método en el objeto de usuario.

La documentos de autenticación son bastante completa.

En vistas a base de clase puede heredar la clase UserPassesTestMixin 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')

Tome un vistazo a esta documentación para más detalles sobre cómo utilizar este:

sistema de permisos es centrado en el modelo y se supone que los permisos están atados a modelos. Creo que después de 2 alternativas son mejores opciones:

A. Si sus puntos de vista están relacionados con algún modelo específico, permisos de uso personalizados de ese modelo como Marcus Whybrow sugirieron.

B. [No probado, puede que no funcione] Subclasss User y definir sus propios permisos allí. No es necesario modelo real, es sólo envoltura para el permiso de encargo de su aplicación:

from django.contrib.auth.models import User
class MyUser(User):
    class Meta:
        permissions = (('can_visit_$viewset1', 'Can visit $view_set_1'))

No se olvide de ejecutar syncdb para agregar permisos personalizados a la base de datos.

Si está utilizando Django 1.9+, debe ser capaz de utilizar PermissionRequiredMixin: https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.mixins.PermissionRequiredMixin

Por ejemplo:

from django.contrib.auth.mixins import PermissionRequiredMixin

class MainView(PermissionRequiredMixin, View):
    permission_required = 'my_services.foo_bar'
    ...

Esto es, básicamente, un caso especial de UserPassesTestMixin, diseñado específicamente para probar si el usuario tiene el permiso indicado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top