wie man Berechtigungen in Django zu Modellen hinzufügt und es mit der Shell testet

8

Ich habe die Meta-Klasse in meinem Modell hinzugefügt und die DB synchronisiert und dann ein Objekt in der Shell erstellt es gibt false zurück, so dass ich wirklich nicht verstehen kann, wo der Fehler ist oder was fehlt, ist eine Art von Konfiguration vielleicht in einigen anderen Dateien ..

%Vor%     
Karim Tarek 20.04.2012, 19:24
quelle

1 Antwort

18

In dem Beispiel, das Sie angegeben haben, würde ich erwarten, dass emp.has_perm('myappname.is_member') tatsächlich False ist. Wenn Sie dem neuen Objekt Employer nicht explizit die Berechtigung is_member geben, wird es nicht verwendet.

Geben Sie dem Programm programmatisch die Berechtigung, die Sie benötigen, um das tatsächliche Berechtigungsobjekt abzurufen, und fügen Sie es der Employer user_permissions :

hinzu %Vor%

Um es in der Shell zu testen, müssen Sie möglicherweise den Berechtigungscache löschen, der für jeden Benutzer erstellt wird. Andernfalls zeigt has_perm möglicherweise nicht die tatsächlichen Berechtigungen an:

%Vor%

Auf Ihre Fragen antworten:

Wenn Sie möchten, dass jedes einzelne Employer die Berechtigung is_member hat, gibt es ein paar Optionen:

  1. Überschreibe die save -Methode von Employer , um zu überprüfen, ob self.pk vorhanden ist (was bedeutet, dass es sich um ein neues Objekt handelt, und erstelle die Berechtigung wie oben gezeigt. Nicht sehr hübsch, aber es würde funktionieren.

  2. Schreiben Sie Ihr eigenes Authentifizierungs-Backend . Wenn der Berechtigungscode 'is_member' ist und User eine Employer -Instanz hat, geben Sie True

  3. zurück
  4. Verwenden Sie keine Berechtigungen. Das Berechtigungssystem ist so konzipiert, dass Sie Berechtigungen dynamisch erteilen und entziehen können. Wenn es Ihnen nur interessiert, ob ein User ein Employer ist - dann testen Sie es. Verkomplizieren Sie es nicht, indem Sie Berechtigungen verwenden.

dgel 20.04.2012, 19:47
quelle