Domanda

Da admin vedo che è possibile allocare le autorizzazioni a un utente o un gruppo di utenti a:. Consentire aggiungere, modificare o cancellazione dei dati da un modello

Questo è grande, ma ho anche bisogno di consentire a un utente o un gruppo di utenti per l'accesso o meno un gruppo di punti di vista. Ho certo tipo di servizi sul mio sito web in modo che voglio per consentire ad alcuni utenti di accedere a determinati servizi (pagine / Vista), ma non gli altri.

Così come posso permettere ad alcuni utenti / gruppi di utenti l'accesso ad alcuni punti di vista? Grazie!

È stato utile?

Soluzione

Gli utenti che non possono aggiungere o modificare ecc un certo modello, non sarà in grado di vederlo in Admin.

Se stiamo parlando di vostri punti di vista personalizzati creati allora si potrebbe creare qualcosa che assegni un utente per un permesso e restituisce un 404 se non hanno che il permesso. I permessi sono legati a modelli e un gruppo possono essere assegnati vari permessi.

È possibile aggiungere un permesso per un modello come questo:

# myproject/myapp/models.py

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

Quindi è possibile controllare un se un utente ha il permesso in questo modo:

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

Utilizzando i permessi si può quindi facilmente aggiungere o rimuoverli da parte degli utenti e dei gruppi semplicemente utilizzando l'interfaccia di amministrazione.

Altri suggerimenti

È necessario gestire tale manualmente, ma è abbastanza facile. Presumibilmente c'è un attributo che determina se un gruppo ha il permesso di vedere una vista: poi basta decorare questo punto di vista sia con il decoratore permission_required, se si tratta di una semplice questione di sapere se l'utente ha una particolare autorizzazione, o user_passes_test se è un po ' più complicato:

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

supponendo che is_allowed_to_see_view_myview è una sorta di metodo sull'oggetto utente.

Il docs autenticazione sono abbastanza completo.

Per le viste base di classe è possibile ereditare classe UserPassesTestMixin nella vista e definire 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')

Date un'occhiata al questa documentazione per maggiori dettagli su come utilizzare questo:

Systema permesso è il modello-centrico e si presuppone che le autorizzazioni sono legati a modelli. Credo che dopo 2 alternative sono migliori opzioni:

A. Se le vostre opinioni sono legati a qualche modello specifico, le autorizzazioni di utilizzo personalizzate su che modello come Marcus Whybrow suggerito.

B. [Non testato, potrebbe non funzionare] Subclasss User e definire i propri permessi di lì. Non è necessario il modello attuale, è solo wrapper per l'autorizzazione doganale del vostro app:

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

Non dimenticare di eseguire syncdb per aggiungere autorizzazioni personalizzate a base di dati.

Se si utilizza Django 1.9+, si dovrebbe essere in grado di utilizzare PermissionRequiredMixin: https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.mixins.PermissionRequiredMixin

Ad esempio:

from django.contrib.auth.mixins import PermissionRequiredMixin

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

Questo è fondamentalmente un caso speciale di UserPassesTestMixin, progettato specificamente per verificare se l'utente ha il permesso indicata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top