LPS:IdM/midPoint/Stag
Info
- endpointy:
- při udatech: vyplňuje se položka stagUser podle přihlášeného uživatele
Resourcy
Stag číselníky
- konektor: connector-stagc
- WSDL: https://stag-demo.zcu.cz/ws/services/soap/ciselniky?wsdl
- volání (viz kód v connector-stagc.git):
- getHierarchiePracovist
- getSeznamPracovist
- getCiselnik
- co hlídat:
- pracoviště bez rodiče
- neaktivní pracoviště
- pracoviště bez vazby na Stag (automaticky by už měla být jako neaktivní)
- ?visící global role?
- pracoviště bez "GLOBAL" rolí
- deaktivace:
- pracoviště: v midPoint zůstávají, jen disabled
- global role: při zrušení pracoviště mizí hned
kind | objectClass | intent | strom |
---|---|---|---|
org | pracoviste | pracoviste | orgType='pracoviste-org-str' |
entitlement | doktorandGroup | global-doktorand-group | roleType='stag-global-group-doktorand' |
entitlement | subjectGroup | global-group-subject | roleType='stag-global-group-subject' |
entitlement | studentGroup | global-group-student | roleType='stag-global-group-student' |
org | typStudiaGroup | global-typ-studia | orgType='stag-global-typ-studia' |
org | formaStudiaGroup | global-forma-studia | orgType='stag-global-forma-studia' |
- pracoviste:
- pouze platné, zneplatněné a smazané v midPointu zůstávají
- global-doktorand-group: pouze katedry
- global-group-subject: pouze katedry
- global-group-student: pouze fakulty
- global-typ-studia: podle číselníku TYP_OBORU
- global-forma-studia: podle číselníku FORMA_OBORU_NEW
Stag studenti
- konektor: connector-stags
- WSDL: https://stag-demo.zcu.cz/ws/services/soap/cro_studenti?wsdl
- volání (viz kód v connector-stags.git):
- selectPredmetyStudia
- selectAllRole - jen aktivní studia
- selectRoliOsoby
- updateOsoba - vložení CRO_ID a login
- selectChangedOsoby(), selectChangedRole()
kind | objectClass | intent | strom |
---|---|---|---|
account | AccountObjectClass | student | - |
entitlement | CustomStudiumObjectClass | studium | roleType=studium |
entitlement | CustomPredmetObjectClass | predmet | roleType=predmet |
Propojení
Primární ID u osob: idOsoby (v databázi je to OSOBIDNO)
- ve IS/Stag může osoba úplně zmizet (merge duplicit, mazání uchazečů, co se dostali až do studentů), ale idOsoby se nerecykluje
- to se v IS/Stag recyklovat NESMÍ, jinak by došlo k záměně identit
Korelace u osob: (více matchů vrátí konflikt)
- ri:idOsoby=idOsoby
- ri:rodCislo=rodneCislo
- ri:rodCisloOld=rodneCislo
- ri:idExterni=employeeNumber
Primární ID u studijních rolí: lokalniId (studijní číslo)
- bacha, studijní číslo se v IS/Stag recyklovat může - studium se může přepojit mezi osobami (merge duplicit) nebo může jít o jiné studium patřící jiné osobě (pokud je původní studium úplně smazané v IS/Stag)
Korelace u studijních rolí:
- ri:lokalniId=identifier && subtype="studium"
liveSync
U liveSync je třeba dát pozor - změny ze selectChangedOsoby() a selectChangedRole() se ukazují pouze tam, kde se staly. Např. Stagem vypočítávané atributy u osob se za změnu osoby nepovažují.
==> pro liveSync u osob bereme změny ze studijních rolí i z osob
U studijních rolí je většina změn.
Také pozor na závislosti objektů - při výpočtech u osoby v midPointu je potřeba mít již nachystané role. liveSync je nastaven, aby bral osoby se zpožděním oproti studijním rolím - poslední 1,5 minuty u osob se odkládá na příště.
Poznámky
Položka rodCisloOld:
- viz RT #308334
- bere se z tabulky ROD_CISLO_ZMENY (položka rod_cislo_old, propojení podle rod_cislo_new)
- v tabulce jsou veškeré změny, vč. změn v tabulce učitelů, kde jsou i externisti s nesmyslnými RČ; bacha, dělá se podle toho propojení! snad to tak moc nevadí: u nových identit to není a u starších identit je pak IdM jen více paranoidní
Stag učitelé
- konektor: connector-stagt
- WSDL: https://stag-demo.zcu.cz/ws/services/soap/cro_ucitele?wsdl
- volání (viz kód v connector-stagt.git):
- selectAllUcitele
- selectUcitele
- insertUcitele
- updateUcitele
Poznámky
- atribut idc:
- pokud je vyplněné idc, je záznam považován za automaticky udržovaný a nelze ručně modifikovat správci (modifikace jdou z IdM přes WS Stagu), s prázdným IDC lze učitele modifikovat administrátory ručně
- využívají některé aplikace (např. REDOP tam potřebuje osobní čísla z Magionu, RT #286249)
- atribut orionUsername: udržuje se jím tabulka ve Stagu ORION_UCITELE využívaná portálem
- externisti:
- záznamy se zamestnanec=N se považují za externisty - WS Stagu je nesmaže při operaci mazání, ani při operaci mazání neresetuje orion login
- od IdM se očekává, že při založení nastaví počáteční hodnotu zamestnanec=A a pak si hodnoty nevšímá; správci si pak mohou přepnout učitele na externistu
- externisty si mohou zakládat katedry (nelze brát jako zdroj identit - smyšlená RČ, ...)
- mazání atributů: v update operaci nastavením na "" (v SOAP zprávě jako prázdný tag)
, nebo u číselníkových hodnot použití 0
Mazání
Záznam učitele nelze vždy smazat - mohou být dependence a chráněny jsou záznamy o externistech (zamestnanec=N); Stag WS nastaví platnosti na 'N' a promaže idc a pokud nejde o externistu i orionUsername.
Constrainty
- unikátnost (prohledávat lze podle ucitIdno, rodCislo a orionUsername):
- ucitIdno (při pokusu o modifikaci je změna ignorována)
- rodCislo
- idc
- orionUsername
- číselník pracovišť ze Stagu (nutno správně mapovat u zaměstnanců z Magionu):
- pracZkr
- pracovisteDalsi
- adresy (nevyplňujeme): kombinace město+PSČ+okres podle číselníků
- RČ: musí být platné (český formát dělitelný 11, české starší RČ nebo formát pro cizince)
- povinné položky:
- rodCislo
- statIdnoObcaName
- ...
kind | objectClass | intent | strom |
---|---|---|---|
account | AccountObjectClass | ucitel | - |
Development
- jedná se nativní connectory v Javě
- používá se knihovna CFX
- k dispozici jsou unit testy - viz README.md
Učitelé
- netolerantní atributy nutno udržovat také v cz.zcu.connectors.stagt.Utils.resetAttributes (resetování při počátečním napojování - pokud se vyrábí identita, jejíž záznam již v učitelích existuje)
TODO
Chyby ve WS IS/STAG:
- rozpoznat výjimku v učitelích:
Generic error in the connector ConnectorInstanceIcfImpl(connector:connector-stagt(ConnId cz.zcu.connectors.stagt.STAGTConnector v1.0.0)). Reason: org.identityconnectors.framework.common.exceptions.ConnectorException(Error during query execution selectUcitele, reason: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: ws_STAG - Connection is not available, request timed out after 10000ms.)->javax.xml.ws.soap.SOAPFaultException(Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: ws_STAG - Connection is not available, request timed out after 10000ms.)->org.apache.cxf.binding.soap.SoapFault(Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: ws_STAG - Connection is not available, request timed out after 10000ms.)