Ich arbeite mich gerade ein wenig ein in das django sites Framework.
Kann es sein, das man User nicht damit trennen kann? Also das man definieren kann User XY ist nur der Amin von SITE_ID==1 und User Foo ist Admin von ID 1+2 usw.
Somit kann man nur ein wenig content auf verschiedene sites aufteilen, aber keine User Rechte? Oder kann man das evtl. über model.Meta.permissions machen?
EDIT: Man müßte es zumindest so machen können: In einem UserProfile (siehe http://docs.djangoproject.com/en/dev/to ... bout-users ) kann man festlegen, auch welche Sites er Zugriff hat. Beim Login muß man das dann selber prüfen.
Django sites Framework und User Rechte...
Das Site-Objekt ist nahezu unbrauchbar. Es ist kein Ersatz für Mandantenfähigkeit. Suche in diesem Forum nach meinen Klagen bzgl. Mandantenfähiger User-Objekte (vielleicht habe ich auch Multitenancy als Begriff benutzt).
Willst du Domänen haben und getrennte User pro Domäne, musst du da eigene Modelle bauen und das Admin-UI patchen, damit es nicht mehr den Standard-User benutzt. Gleichzeitig koppelst du dich so von nahezu allen anderen Apps (z.B. was Pinax so bietet) ab. Ich hatte damals versucht, das User-Modell zu patchen, aber das ist auch hässlich.
UserProfile reicht IMHO nicht. Weiteres Problem ist, dass Django trotz verschiedener Domänen jeden Namen nur 1x zulässt, weil da ein unique constraint drauf ist. Der muss weg. Dann aber geht das Auth-Backend nicht mehr richtig. Also musst du versuchen, die Domäne als Prefix oder Postfix an den Usernamen anzuhängen - das aber ansonsten immer ausblenden. Dann wird a) der erlaubte Username möglicherweise zu kurz und b) gehen die vorgefertigten Login-Dialoge nicht mehr und die ansonsten praktische django-registration-App.
Alles doof.
Stefan
Willst du Domänen haben und getrennte User pro Domäne, musst du da eigene Modelle bauen und das Admin-UI patchen, damit es nicht mehr den Standard-User benutzt. Gleichzeitig koppelst du dich so von nahezu allen anderen Apps (z.B. was Pinax so bietet) ab. Ich hatte damals versucht, das User-Modell zu patchen, aber das ist auch hässlich.
UserProfile reicht IMHO nicht. Weiteres Problem ist, dass Django trotz verschiedener Domänen jeden Namen nur 1x zulässt, weil da ein unique constraint drauf ist. Der muss weg. Dann aber geht das Auth-Backend nicht mehr richtig. Also musst du versuchen, die Domäne als Prefix oder Postfix an den Usernamen anzuhängen - das aber ansonsten immer ausblenden. Dann wird a) der erlaubte Username möglicherweise zu kurz und b) gehen die vorgefertigten Login-Dialoge nicht mehr und die ansonsten praktische django-registration-App.
Alles doof.
Stefan
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also richtige Mandantenfähigkeit brauche ich eigentlich nicht. Möchte aber auch nicht, das einfache User an alles dran kommen.
Ich denke ich versuche es so: Ich nutzte einen eigenen Login, der UserProfile abfragt, ob der User auf SITE xy Zugriff hat. (Im UserProfile gibt es ein many-to-many zu site).
Superuser können natürlich auf alles zugreifen.
Durch die many-to-many verbindung zu Site, ist es auch kein Problem, das der Username einmalig sein muß.
Schön wäre es natürlich, wenn django das von sich aus schon bieten würde.
Naja, man kann nicht alles haben
Ich denke ich versuche es so: Ich nutzte einen eigenen Login, der UserProfile abfragt, ob der User auf SITE xy Zugriff hat. (Im UserProfile gibt es ein many-to-many zu site).
Superuser können natürlich auf alles zugreifen.
Durch die many-to-many verbindung zu Site, ist es auch kein Problem, das der Username einmalig sein muß.
Schön wäre es natürlich, wenn django das von sich aus schon bieten würde.
Naja, man kann nicht alles haben
Kannst du dann nicht einfach die User einer Site einfach alle in eine Gruppe packen? Dann gibt es eine implizite 1:1-Beziehung zwischen Group und Site und diese kannst du dann für alle Fragen der Berechtigung nutzen.
Stefan
Stefan
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Egal wo man die Information speichern, ob in "Group" oder in einem "UserProfile", die eigentliche Limitierung mache ich nun so: Ich hab ein eigenes AUTHENTICATION_BACKENDS Klasse erstellt.
Ich erbe in der Klasse von django.contrib.auth.backends.ModelBackend und implementiere die Methode authenticate() neu. Dort wird nach dem Überprüfen von Username und Passwort, dann nachgeschaut, ob der User zugriff auf die aktuelle site hat...
Ich erbe in der Klasse von django.contrib.auth.backends.ModelBackend und implementiere die Methode authenticate() neu. Dort wird nach dem Überprüfen von Username und Passwort, dann nachgeschaut, ob der User zugriff auf die aktuelle site hat...