Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

BenutzerVerwaltung

niels edited this page Dec 10, 2017 · 4 revisions

SZE benutzt Apache shiro für die Authentifizierung und Authorisierung.

Die Lehrer werden dabei übers LDAP authentifiziert. Hierzu müssen in der application.properties die Felder shiro.ldap.url=ldap://localhost:50389 shiro.ldap.domain=sze.local gesetzt werden. Damit den Lehrern auch noch eine Rolle zugeordnet werden kann, müssen diese in der durch die Property shiro.userAndRole=classpath:userAndRoles.ini definierte Datei eingetragen sein. Zusammen mit einem kaputten Hash, z.B. $ldap$ldap$ldap=. Das ganze wird gefolgt von der Rolle. Theoretisch könnte man auch die Rollen im LDAP verwalten, hier findet man aber leider nicht immer einen so geordneten Stand wie man sich das wünscht.

Ein weiterer Vorteil der Datei ist, dass man zusätzlich lokale Benutzer anlegen kann. Die benötigen, dann natürlich ein echtes Passwort. Dieses wird erzeugt mit Shiro command line hasher (download).

Nachfolgend eine Beispiel-Konfiguration

[roles]
LEHRER=zeugnis:*
CONFIGURATOR=config:*, bewertung:seeLastNote, print:remoteOne, print:remoteAll
ADMINISTRATOR=admin:*

[users]
admin=$shiro1$SHA-256$500000$IyoTBOKdam82+TM6UtjP3Q==$lsR4umjPj/KDcTROKkYkLKK7Dp/8CpJzXMS7ylDz5g8=,CONFIGURATOR,LEHRER,ADMINISTRATOR
config=$shiro1$SHA-256$500000$IyoTBOKdam82+TM6UtjP3Q==$lsR4umjPj/KDcTROKkYkLKK7Dp/8CpJzXMS7ylDz5g8=,CONFIGURATOR
lehrer=$shiro1$SHA-256$500000$IyoTBOKdam82+TM6UtjP3Q==$lsR4umjPj/KDcTROKkYkLKK7Dp/8CpJzXMS7ylDz5g8=,LEHRER
ldapuser=$ldap$ldap$ldap=,LEHRER

Rechte

Folgende Rechte können vergeben werden:

  • zeugnis:* : Alles was man benötigt um Zeugnisse anzulegen
  • admin:* : Komplexe admin-Vorgänge für jemand der sich wirklich auskennt.
  • config:* : Alles was man braucht um die Zeugnisse zu konfigurieren, Schüler anzulegen etc.
  • print:remoteOne, print:remoteAll: Erlaubt auch bei Remote-Benutzung das Zeugnis für einen oder für eine Klasse herunterzuladen.
  • bewertung:seeLastNote : Benutzer mit diesem Recht können die Note vom Vorjahr bei der Eingabe sehen.

Die Rechte-Prüfung erfolgt über die URL bzw. teilweise auch in den Templates.

Skript zum erstellen einer userAndRoles.ini

Nachfolgendes Skript sichert die ersten 11 Zeilen von der alten Datei und erstellt den Rest mit ldapsearch

#!/bin/bash
CONFIG_PATH="<pfad zur konfiguration"
INI="userAndRoles.ini"

TMP_INI=/tmp/$INI
ORG_INI=$CONFIG_PATH/$INI
DIFF=/tmp/diff

IGNORE="MustermannIgnore"
CONFIG_USER="MustermanConfig"
ROLES="LEHRER"

head -n11 $ORG_INI > $TMP_INI

ldapsearch -x  -y .ldappasswd -H ldap://<ip-adresse>:389 -b "ou=Lehrer,dc=SZE,dc=loc"  '(&(objectClass=user))' sAMAccountName |\
grep -B2  sAMA |grep -v '\-\-' |  grep -v dn|sed 's/sAMAccountName: \(.*\)/\1/g'| \
while read lehrer ; do
   if [[ $lehrer =~ ^#.* ]]; then
      echo $lehrer >> $TMP_INI;
   else 
      if [[ ! $IGNORE =~ $lehrer ]]; then
        if [[ $CONFIG_USER =~ $lehrer ]]; then
          roles="$ROLES,CONFIGURATOR"
        else 
          roles=$ROLES
        fi
        echo ${lehrer}'=$ldap$ldap$ldap=,'$roles >> $TMP_INI
        # Alles kleingeschrieben noch mal zusätzlich.
        echo ${lehrer,,}'=$ldap$ldap$ldap=,'$roles >> $TMP_INI
      fi
   fi
done
diff $TMP_INI $ORG_INI > $DIFF
if [[ -s $DIFF ]]; then
    #mail
    mail -s "Neue Lehrer" [email protected] < $DIFF
    #cat $DIFF 
    mv $ORG_INI $ORG_INI.bak
    mv $TMP_INI $ORG_INI
    chown sze.lehrer $ORG_INI
    chmod 600 $ORG_INI
    /<pfade zum init.skript>/init.sh restart
fi