20120525

Weiter mit der CBSS Connection.

Added user group “cbss”.

Um den Reiter “CBSS” für Unbefugte verschwinden zu lassen, musste ich noch was weiter ausholen als vor kurzem für den Reiter “Debts”.

Der Reiter “Debts” war ein Reiter mit einem einzigen GridPanel. Ein GridPanel kennt seinen actor und kann get_view_permission an diesen weiterleiten.

Aber jetzt musste ich lino.core.actors.Actor.add_detail_tab() erweitern, so dass lino.modlib.cbss.models.site_setup() dort required_user_groups=[‘cbss’] angegeben kann. Funktioniert super.

Hat wohl auch knapp zwei Stunden Fehlersuche gekostet, weil ich dabei in eine subtile Mausefalle geraten war: Actor.get_view_permission und Component.get_view_permission tun beide genau das Gleiche, deshalb hatte ich sie in eine gemeinsame Klasse ViewPermission gesetzt, die außerdem die beiden Klassenvariablen required_user_level und required_user_group definiert. Was ich übersehen hatte, war dass get_view_permission für Actor eine @classmethod sein muss, für Component dagegen eine Instanzmethode!

User sind keine Partner

Bisher war users.User eine MTI-Unterklasse von contacts.Partner. Aber ich habe erkannt, dass das nicht so gut war:

  • erstens war lino.modlib.users dadurch von lino.modlib.contacts abhängig,
  • zweitens muss man bedenken, dass für jeden Request als erstes der User rausgesucht wird (um Sprache und Benutzerrechte zu ermitteln). Und das war bisher ein SELECT mit JOIN, also ein Zugriff auf mindestens zwei Datenbanktabellen.

Einige Konsequenzen:

  • Für “technische” Benutzer wie admin oder root braucht jetzt kein Partner mehr zu existieren.
  • Im Detail eines Benutzers hat man jetzt keine Postadresse usw. mehr. Stattdessen ein Feld “Partner”, das auf den Partner verweist. Damit Benutzer einem Kollegen eine Mail schicken können, muss ein entsprechender Partner angelegt werden. Also bei neuen Benutzern dran denken.
  • Im Detail von “Alle Partner” ist kein Feld “ist Benutzer” mehr. Dort könnte falls nötig eine Liste UsersByPartner erscheinen, wahrscheinlich am ehesten als kleines HtmlPanel im Reiter “Sonstiges”.

Noch zwei Bugs

Beim Rumspielen und Testen sind mir noch zwei allgemeine Bugs aufgefallen:

  • add_detail_tab() für users.Users funktionierte nicht in lino.apps.pcsw, weil dessen detail_layout in pcsw neudefiniert wird. Ich habe das zwar gelöst, aber das ist ziemlich tricky.
  • Im Kalenderpanel macht ein Klick auf ein Event eine Fehlermeldung in der Java-Console statt das Detail zu öffnen.