Změna DN v LDAP pomocí Sun IdM workflow
Tento příspěvek ukazuje, jak je možné v Sun Identity Manageru (dále jen IdM) přesunout uživatele z jednoho kontejneru do jiného v adresářovém serveru LDAP.
Zadání zní takto:
Vytvořte workflow, které dostane vstupní parametry accountId a sluzebnatext. Workflow ověří jestli dn, které se z těchto parametrů složí je shodné jako to, které získá z uživatelského view. Pokud se dn nebudou shodovat, dojde k přesunutí uživatele.
Můj postup byl následující:
Nejprve bylo nutné získat uživatelské view pro uživatele, jehož accountId jsem dostal na vstupu.
Tento příspěvek ukazuje, jak je možné v Sun Identity Manageru (dále jen IdM) přesunout uživatele z jednoho kontejneru do jiného v adresářovém serveru LDAP.
Zadání zní takto:
Vytvořte workflow, které dostane vstupní parametry accountId a sluzebnatext. Workflow ověří jestli dn, které se z těchto parametrů složí je shodné jako to, které získá z uživatelského view. Pokud se dn nebudou shodovat, dojde k přesunutí uživatele.
Můj postup byl následující:
Nejprve bylo nutné získat uživatelské view pro uživatele, jehož accountId jsem dostal na vstupu.
<Activity id='1' name='findDataInView'>
<Action application='com.waveset.session.WorkflowServices'>
<Argument name='op' value='getView'/>
<Argument name='viewId'>
<concat>
<s>User:</s>
<ref>accountId</ref>
</concat>
</Argument>
<Return from='view' to='view'/>
</Action>
<Transition to='isDnSame'>
<notnull>
<ref>view</ref>
</notnull>
</Transition>
<Transition to='end'/>
<WorkflowEditor x='176' y='112'/>
</Activity>
Z view jsem dostal firstname a lastname, ze kterých jsem odstranil diakritiku pomocí funkce napsané v jazyku Java. Diakritiku jsem odstranil i ze vstupního parametru sluzebnatext. Pomocí rule jsem poté mohl zkonstruovat DN a uložit jej do proměnné dnNew (pro lepší představu: v hodnotě dnNew může být např. následující String: „cn=Jmeno Prijmeni,ou=Budova 1,o=Pobocka 1,ou=People,o=Firma,c=cz“). Dalším krokem (akcí) bylo nastavení DN, které jsem získal z view do proměnné dnFromView.
<Activity id='2' name='isDnSame'>
<Variable name="firstname">
<invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'>
<ref>view.accounts[Lighthouse].firstname</ref>
</invoke>
</Variable>
<Variable name="lastname">
<invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'> <ref>view.accounts[Lighthouse].lastname</ref>
</invoke>
</Variable>
<Action id='0' name='removeDiacritic'>
<expression>
<setvar name='sluzebnaText'>
<invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'>
<ref>sluzebnaText</ref>
</invoke>
</setvar>
</expression>
</Action>
<Action id='1' name="createDN">
<expression>
<setvar name='dnNew'>
<rule name="BCV Create Dn">
<argument name="firstname" value="$(firstname)"/>
<argument name="lastname" value="$(lastname)"/>
<argument name="sluzebnatext" value="$(sluzebnaText)"/>
</rule>
</setvar>
</expression>
</Action>
<Action name="setupDNFromView">
<set name="dnFromView">
<ref>view.waveset.accounts[Logserver].accountId</ref>
</set>
</Action>
<Transition to="moveUser">
<neq>
<ref>dnNew</ref>
<ref>dnFromView</ref>
</neq>
</Transition>
<Transition to='end'/>
<WorkflowEditor x='23' y='113'/>
</Activity>
Pokud se DN liší (např. mohlo dojít ke změně jména, či přesunu pracovníka do jiné pobočky), dojde ke skoku do aktivity s názvem „moveUser“, ve které dojde k přejmenování uživatele. Je nutné udělat checkoutView, nastavit v požadovaném zdroji (Resource) novou identitu, nastavit v požadovaném zdroji příznak, že došlo ke změně a poté udělat checkinView.
<Activity name="moveUser">
<Action id='0' application='com.waveset.session.WorkflowServices'>
<Argument name='op' value='checkoutView'/>
<Argument name='id' value='$(accountId)'/>
<Argument name='type' value='RenameUser'/>
<Return from='view' to='renameUserView'/>
</Action>
<Action name="changeDN">
<expression>
<block>
<set name='renameUserView.accounts[Logserver].identity'>
<ref>dnNew</ref>
</set>
<set name='renameUserView.resourceAccounts.currentResourceAccounts[Logserver].selected'>
<i>1</i>
</set>
</block>
</expression>
</Action>
<Action id='2' application='com.waveset.session.WorkflowServices'>
<Argument name='op' value='checkinView'/>
<Argument name='view' value='$(renameUserView)'/>
</Action>
<Transition to='end'/>
<WorkflowEditor x='294' y='240'/>
</Activity>
Nyní došlo k přejmenování uživatele systému LDAP.