2017-02-20 2 views
0

Ich habe folgende Modelle:Django-Wächter-Berechtigungen - Festlegen von Berechtigungen für Objekte in einer auf-zu-viele-Beziehung

Projekt:

class Project(models.Model): 
    project_name = models.CharField(max_length=100, unique=True) 

SearchCodes:

class SearchCode(models.Model): 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    search_code = models.CharField(max_length=3) 
    search_code_modifier = models.CharField(max_length=1) 

    class Meta: 
    unique_together = ('project', 'search_code', 'search_code_modifier',) 

Von der Django-Guardian docs Ich kann Berechtigungen in dem Django-Administrator festlegen. Dann kann ich für ein Projekt Benutzer in einer Ansicht wie folgt überprüfen/einschränken:

def project_edit(request, pk_project): 

    project = get_object_or_404(Project, pk=pk_project) 
    project_name = project.project_name 

    user = request.user 

    # Check user permission at the object level by passing in this specific project 
    if user.has_perm('myApp.change_project', project): 
     ...do something 

Jetzt ist hier, wo ich feststecke. Wie setze ich Berechtigungen für ALLE SearchCodes, die zu einem Projekt im Django-Admin gehören? Ich möchte keine Berechtigungen auf Objektebene für die SearchCodes festlegen - das wäre nur jede Instanz von SearchCode. Eher muss ich in der Lage sein, im Admin zu setzen:

Sie können jeden SearchCode, der mit diesem Projekt verwandt ist, aber keine anderen SearchCodes anzeigen.

Bitte lassen Sie mich wissen, wenn ich genauer sein muss - ich habe versucht, dies so allgemein wie möglich zu halten.

Vielen Dank - jede Hilfe oder Hinweise würden sehr geschätzt werden.

EDIT:

Ich benutzte das Admin-Integration Beispiel die Project-Objekt-Ebene-Berechtigungen in Django-Wächter einzurichten.

Es fühlt sich so an, als müsste es auf diese Weise eine Möglichkeit geben, die Berechtigungen für alle SearchCodes festzulegen, die mit dieser bestimmten Instanz von Project in Verbindung stehen, während ich auf der Seite Objektberechtigungen für dieses Projekt bin.

Antwort

1

Django-Guardian ist eine Berechtigungsanwendung auf Objektebene, also weisen Sie einem Objekt Berechtigungen zu, die die Berechtigung besitzen, und prüfen Sie dieses Objekt auf Berechtigung. In Ihrem speziellen Beispiel müssen Sie etwas schreiben, um die Berechtigungen für den Code über das Projekt zu prüfen (Berechtigung Übertragsobjekt):

+0

Vielen Dank für Ihre Antwort. Dies ist sehr hilfreich (+1) für das Überprüfen von Berechtigungen, nachdem sie festgelegt wurden - aber ich suche nach Zeigern/Tutorial usw., wie man die Berechtigungen für SearchCodes im Django-Admin einstellt. Obwohl ich denke, dass ich dieses Konzept wahrscheinlich verwenden kann und meine eigenen Berechtigungen auf der SearchCode-Ebene einbringe - ich würde es lieber im Admin machen - aus Gründen der Benutzerfreundlichkeit und Konsistenz :) – beginAgain

Verwandte Themen