LPS:IdM/midPoint/Stag
Info
- endpointy:
- při udatech: vyplňuje se položka stagUser podle přihlášeného uživatele
Model v midPointu
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, viz také #rodCisloOld a RT #308334)
- 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
Atribut 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í
Aributy usernameExterni, cisloKartyJIS, cisloNaKarteJIS:
- u neaktivních studentů pokusy o jejich nastavení IS/STAG ignoruje (IdM se to tam snaží tlačit např. u zaměstnanců - drobný bug způsobující zbytečné pokusy o update, k opravení v IdM)
Atribut prijmeni:
- v agendě je uppercasované, IdM downcasuje (není to úplně správně, ale nenaráží se na žádné potíže)
- heuristika:
- kapitalizace prvního pímena po jednotlivých slovech
- kapitalizace třetího písmene u příjmení začínající "MC"
- při uppercasování zpět (např. pro JIS) se radějí používá originál z IS/STAG bez převodů (viz např. ostré S [1])
Atribut uchazecBudouciRok:
- (2023-09: zatím se nepoužívá)
- RT #378241
- zda má student podanou přihlášku na další rok
- účel: pokud student končí, je pravděpodobnost, že bude pokračovat dále
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
- atributy pracZkr, pracovisteDalsi: podle zařazení uživatele (pracoviště studia v IS/STAG nebo pracovního úvazkuv Magionu)
- ze studia: zkratka pracoviště 1:1 podle pracoviště v IS/STAG
- z Magionu: prochází se hierarchie pracovišť v HR stromu směrem nahoru až ke kořenu a zkouší se vyhledat stejná zkratka pracoviště kdekoliv ve stromu pro IS/STAG; vrací zkratku z první nalezené shody; pokud nic nenajde, vrací "REK"
- 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
Existence
- zaměstnanci, doktorandi, další vyjímky přes roli IdM: Teachers (studenti, hostovská konta)
- musí být přiděleno CRO ID (pro IDC)
- musí být vyplněna státní příslušnost (povinná položka v IS/STAG, zřejmě kvuli ověřování RČ?)
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 CXF
- 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.)
- občas vznikají nekonzistence v tabulce IS/STAG INSTALL2.ORION_UCITELE - ucitIdno je smazáno, ale záznam zůstane
- nedetekuje se pokus o založení duplicity v INSTALL2.ORION_UCITELE
Chyby v IdM:
netlačit login a JIS do studentů při neaktivním studiu (nevadí, jen zbytečný pokus o updaty)- u studijních rolí je potřeba použít sdružený klíč, např. lokalniId-idOsoby, protože číslo studia se může recyklovat