django: user.user_permissions.add will nicht?!?!

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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 :)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten