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 :shock:
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.