-
Notifications
You must be signed in to change notification settings - Fork 1
BenutzerVerwaltung
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
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.
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