Seite 1 von 1
django: user.user_permissions.add will nicht?!?!
Verfasst: Mittwoch 17. Juni 2009, 16:09
von jens
Ich will in einem unittest dem user rechte zuweisen, doch das geht nicht. Code:
Code: Alles auswählen
print user
print user.get_all_permissions()
user.user_permissions.add("pylucid.can_edit_page")
user.user_permissions.add("pylucid.can_edit_pagemeta")
user.save()
print user.get_all_permissions()
Ausgabe:
normal test user
set([])
set([])
Was mache ich falsch?
Re: django: user.user_permissions.add will nicht?!?!
Verfasst: Mittwoch 17. Juni 2009, 17:47
von apollo13
jens hat geschrieben:Was mache ich falsch?
Du schaust dir den Django Source nicht an;
http://code.djangoproject.com/browser/d ... nds.py#L58 erklärt dein Problem.
Verfasst: Donnerstag 18. Juni 2009, 07:58
von jens
Hilft mir noch nicht so ganz weiter.
Auch ein
del(user._perm_cache) ändert nichts, denn auch
user.user_permissions.select_related() liefert nur eine leere Liste zurück.
EDIT: Ah. Was hilft ist ein Blick in
http://code.djangoproject.com/browser/d ... s/tests.py
Offensichtlich gibt es keinen Fehler, wenn man
user.user_permissions.add("gibt es nicht") macht

Anscheinend passier einfach nix, wenn man einen String übergibt
So geht's anscheinend:
Code: Alles auswählen
from django.contrib.auth.models import Permission
perm = Permission.objects.get(codename="change_pagecontent")
user.user_permissions.add(perm)
perm = Permission.objects.get(codename="change_pagemeta")
user.user_permissions.add(perm)
Das muß ich mir nochmal genauer ansehen...
Verfasst: Donnerstag 18. Juni 2009, 17:59
von apollo13
Das ist ansich klar, da du ja eine related Model Instanz übergeben musst und nicht einen String… Ein Fehler wäre hier allerdings sinnvoll

EDIT:// Ich seh grad, die tests hab sogar ich geschrieben

Verfasst: Freitag 19. Juni 2009, 07:25
von jens
In der doku gibt es kein richtiges Beispiel. Da findet man nur
myuser.user_permissions.add(permission, permission, ...)
Da
user.has_perm() Strings in form von "<application name>.<lowercased model name>" entgegen nimmt, dache ich einfach das es bei add auch so sein kann. Da kein Traceback kommt, dachte ich eigentlich das es auch gehen würde. Beim unittest schreiben zeigte sich dann das es nicht so ist
Das kein Fehler kommt, ist entweder ein Bug, oder ein Fall für:
http://code.djangoproject.com/wiki/BetterErrorMessages
EDIT: Mal nachgefragt:
http://groups.google.com/group/django-d ... 74bf042a03#
und ein Blog Artikel dazu:
http://www.jensdiemer.de/_command/118/blog/detail/62/
Verfasst: Freitag 19. Juni 2009, 15:01
von jens
Karen Tracey auf django-developers hat eine Erklärung:
Mit SQLite kommt es zu keinem Fehler, weil der DB egal ist ob der foreign key existiert oder nicht.