Django sites Framework und User Rechte...

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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

Verstehe ich jetzt nicht ganz. Django's Group Model hat von sich aus, keine Verknüpfung mit Site.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Nein, aber für Site "ABC" kannst du eine Gruppe names "ABC" anlegen. Das meinte ich mit implizit.

Stefan
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, ok so könnte man es machen. Halte ich aber nicht für die Beste Idee. Die Gruppen sollten für den Admin zur freien Verfügung stehen. Da stören IMHO die "domain-Gruppen" ein wenig.

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:

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

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