[Django] Permissions gegen auth.models.Permission prüfen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich habe in einem meiner Modelle folgendes definiert:

Code: Alles auswählen

from django.contrib.auth.models import Permission
class Special(models.Model):
    permissions = models.ManyToManyField(Permission)
Jedem Special werden damit also Berechtigungen zugewiesen.
Mir geht es darum, dass nur spezielle Benutzer, die eben diese ausgewählten Berechtigungen haben, etwas Bestimmtes mit einem Special anfangen dürfen.
Dafür müsste ich also die hinterlegten Berechtigungen gegen die des Benutzers prüfen, da stecke ich aber leider fest.

Das hier sah mir am erfolgversprechendsten aus, funktioniert aber leider nicht (user.has_perm(permission) ist immer False, auch wenn der Benutzer die Berechtigung hat):

Code: Alles auswählen

special = Special.objects.get(id=1)
for permission in special.permissions.all():
    if user.has_perm(permission):
        return True
return False
Irgend etwas habe ich falsch verstanden. Sind das nicht die Permissions, die man mit has_perm prüfen kann?

Edit: Oh, ich sehe gerade, dass user.has_perm einen String erwartet. Dann hätte ich aber gedacht, dass folgendes tut:

Code: Alles auswählen

Special.objects.get(id=1)
user_permissions = user.get_all_permissions()
for permission in special.permissions.all():
    if permission in user_permissions:
        return True
return False
Ich habe das jetzt so gelöst, dass ich mir User.user_permissions und aus den Gruppen User.groups.permissions geholt habe, und gegen die Prüfe. Das funktioniert zwar, fühlt sich aber seltsam an.
Antworten