2016-07-07 3 views
0

In hierarchischer Organisationsebene, wie Berechtigungen auf Abteilungsebene bereitgestellt werden, da sich Daten zu jedem Mitarbeiter in derselben Tabelle befinden.Erlaubnis in django.

hier S (Mitarbeiter) ist Grundeinheit in der gesamten Organisation. hierarchy of Employees

Jetzt möchte ich E-Abteilung kann den Zugang sehen, die Mitarbeiter Chagne nur die unter ihnen sind, ähnlich für die obere Ebene, mir jemand sagen kann, wie soll ich anfangen?

+0

Dies ist keine besonders gute Frage, da es hier keine MVCE gibt, und Sie stellen wirklich eine Reihe von Fragen - Datenbankdesign und Benutzerberechtigungen zumindest - ich würde mir http: // ansehen stackoverflow.com/help/how-to-ask und sehen Sie, ob Sie dies entsprechend bearbeiten können. – Withnail

Antwort

0

Muss es django sein?

Diese Traversal Stil Layout sieht eher wie ein Job für Pyramide.

https://pypi.python.org/pypi/django-mptt scheint einen guten Ausgangspunkt für Ihre Baumstruktur, aber mit dem Berechtigungssystem Sie sind auf eigene Faust

0

Lassen Sie sich Benutzerobjekt hat einen Fremdschlüssel namens Einheit auf das Niveau, das sie repräsentieren (B1 Ihre Manager übernehmen , C3, ...)

Zuerst benötigen Sie einen Weg, um alle Mitarbeiter, die Nachkommen sind. Wie schon erwähnt, wird Django-Mptt dein Leben viel einfacher machen. Einfach user.unit.get_leafnodes() mit mptt korrekt einrichten und du hast alle deine verwalteten Mitarbeiter.
Siehe MPTTModel.get_leaf_nodes.

Dann müssen Sie diese Informationen verwenden.

Wenn Sie den django admin verwenden, können Sie diesen in ModelAdmin.get_queryset verwenden. get_queryset nimmt die Anfrage als Argument. Einfach auf request.user zugreifen und Sie sind wieder auf den Beinen. Sie können dann die Dinge ein wenig mehr mit ModelAdmin.has_change_permission und der Familie abschließen.

Wenn Sie mehr Kontrolle möchten, werfen Sie einen Blick auf die generischen klassenbasierten Ansichten. Ihre views.py kann so einfach sein:

from django.views import generic 
from .models import Employee 

class EmployeeList(generic.ListView): 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

class EmployeeCreate(generic.edit.CreateView): 
    fields = ["name"] 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

class EmployeeUpdate(generic.edit.UpdateView): 
    fields = ["name"] 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

Die Bearbeitungsansichten, die ein ModelForm basierend auf dem Objekt durch die queryset zurück schaffen. Das Attribut fields ist erforderlich. Siehe das Dokument unter generic views und those based on models forms.

+0

Ok, ich werde diese Dokumente lesen. Danke für die Information. Hoffentlich löst dies auch das Problem der Zulassung –