Import a export rolí ze Oracle Identity Managementu do CSV


Cílem tohoto článku je ukázat, jakým způsobem je možné exportovat a importovat role ze Sun Identity Manageru (Oracle Waveset).

Jeden z našich klientů, kterému pomáháme v oblasti identity managementu potřeboval, aby z Identity Managera (dále jen IdM) bylo možné vyexportovat role do textového souboru. Exportované soubory s rolemi budou editovat správci jednotlivých systémů a následně bude prováděn hromadný import do IdM.

Export rolí do CSV

Jak tedy postupovat, když si chceme naprogramovat vlastní export rolí? My jsme si nejprve vytvořili formulář, ve kterém má uživatel možnost vyhledat role, které chce exportovat a přidat je na seznam rolí k exportu. Na formulář jsme dále přidali tlačítko „exportovat všechny role“.

Poté, co uživatel odešle seznam rolí k exportu, spustí se worflow a dojde k inicializaci prográmku v Javě. Po inicializaci se vytvoří/otevře soubor, do kterého se budou exportovat data. Poté dojde k zapsání hlavičky souboru. Následuje cyklus (ve worflow), který prochází seznam rolí. Toto workflow pomocí pravidla „getObject“ (viz. ukázka níže) načte objekt com.waveset.object.Role, který obsahuje potřebné informace o roli pro export. Hodnoty, které chceme exportujeme do CSV souboru a cyklus pokračuje exportem následující role. Po dokončení cyklu dojde k uzavření souboru a ukončení exportu.

K zápisu do CSV souboru používáme třídu com.csvreader.CsvWriter.

Pomocí tohoto pravidla lze získat objekt (v našem případě typu Role):

<Rule authType='EndUserRule'  id='#ID#Rule:getObject' name='getObject'>
    <RuleArgument name='type'/>
    <RuleArgument name='name'/>
    <RunAsUser>
        <ObjectRef type='User' id='#ID#Configurator' name='Configurator'/>
    </RunAsUser>
    <MemberObjectGroups>
        <ObjectRef type='ObjectGroup' id='#ID#ALl' name='All'/>
    </MemberObjectGroups>
    <block>
        <invoke name='getObject'>
            <rule name='EndUserRuleLibrary:getCallerSession'>
            </rule>
            <ref>type</ref>
            <ref>name</ref>
        </invoke>
    </block>
</Rule>

Import rolí

Import rolí je oproti exportu o něco komplikovanější. Komplikace spočívá v tom, že v okamžiku kdy importujeme podřazené role musíme počítat s tím, že daná role ještě není vytvořena v IdM. Pokud toto zjistíme, je třeba roli vytvořit a kontrolovat, že se nově vytvořená role objeví mezi následujícími importovanými záznamy. Pokud ne, je třeba o tom informovat uživatele, který provádí import. Zde je stručný popis algoritmu, který zajišťuje import rolí:

  • získáme aktuální řádek
  • zjistíme zda role existuje, pokud ne, vytvoříme ji
  • provedeme checkoutView
  • nastavíme do view aktuální hodnoty z CSV
  • prověříme, že seznam schvalovacích rolí či podrolí neobsahuje neexistující role, pokud ano, vytvoříme je
  • na závěr zjistíme, zda jsme nevytvořili roli (která byla uvedena v seznamu schvalovacích rolí či v seznamu podrolí), která nebyla uvedena nikde v importovaném souboru. Pokud byla takováto role vytvořena, informujeme o tom uživatele.

Největší komplikací při importu byla editace typu role. Původně jsme chtěli postupovat tak, že při importu nastavíme hodnoty do objektu com.waveset.object.Role. Při nastavení typu role (např. IT Role, Application Role,…) a uložení objektu se však změna v repository neprojevila. Proto jsme použili úpravu atributů přímo ve view. Použití editace view je přirozenější způsob, avšak setování hodnot do view je o něco více náročnější než do objektu Role, který má na nastavování hodnot funkce (setX, addX, apod.).

Import a export rolí ze Sun Identity Manageru je možné naprogramovat za několik pracovních dní (5 – 10) v závislosti na tom, které atributy chceme importovat/exportovat a na tom, jaké další doplňkové funkce chceme používat (vyhledávaní rolí pro export vs. Export všech rolí, vyhledávání rolí pro import vs. Import všech rolí, ….)