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.


<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.