Novell Home

Resyncing Users in IDM after a Delete

Novell Cool Solutions: Tip
By Ofer Gigi

Digg This - Slashdot This

Posted: 26 Sep 2007
 

Problem

A Forum reader recently asked:

"We have an Identity Source using eDirectory, with some connected systems, such as Oracle DB, Lotus notes and OpenLDAP. The Identity source can synchronize the user's identity information to the connected system by drivers, and we can control the user's provision to the connected systems by workflow.

We need to delete users in the connected system who exist in the Identity Source eDirectory. The user can be recreated in the connected system by "migrate form the vault," but it is hard to be recreated and synchronized by the policy or by the user's provision. Also, the way that the connected system disables the user is to delete the user. There is no "login disable " attribute in the user's information structure.

Is there some other ways can implement the user's recreation in the connected system?"

And here's the response from Ofer Gigi ...

Solution

One way to do that involves a service driver (eg Loopback driver, Null driver) and an attribute to be used as a flag (let's say: UnDeleteFlag, type Boolean):

On the connected system driver's Publisher event transformation policy, if the incoming operation is Delete:

1. Put the value "false" on the UnDeleteFlag attribute.

2. Remove the association on the IdV object (important!).

3. Block (Veto) the incoming Delete operation.

4. (Optional) Send some email notifications.

On the Service driver's Subscriber event transformation policy, if the operation attribute UnDeleteFlag equals "false":

1. Put the value "true" on the (source) UnDeleteFlag attribute.

Then, recreating the deleted object should happen automatically. Your connected system driver will follow the normal path of creating a new object based on whatever policies (including Entitlement policies) you may already have.

Note: Make sure the UnDeleteFlag atribute is on the connected system and the service drivers' subscriber filter. "Notify" will do.

The filter would need to allow events on the publisher channel, although you don't really want to syncrhonize them in your case (publisher="sync"). You should be good to go with publisher="sync" on the User Class only (and not on any user attribute). You would also want to prevent incoming events from actually flowing in. Put a veto on add, modify, move, rename and delete (which was already mentioned).

You could also try something like this:

<?xml version="1.0" encoding="UTF-8"?><policy>
  <rule>
    <description>Set Delete Flag</description>
    <conditions>
      <and>
        <if-operation op="equal">delete</if-operation>
        <if-association op="associated "/>
      </and>
    </conditions>
    <actions>
      <do-set-dest-attr-value name="unDeleteFlag">
        <arg-value type="string">
          <token-text xml:space="preserve">false</token-text>
        </arg-value>
      </do-set-dest-attr-value>
      <do-remove-association>
        <arg-association>
          <token-association/>
        </arg-association>
      </do-remove-association>
      <do-veto/>
    </actions>
  </rule>
</policy>

Note again that the "unDeleteFlag" attrbute was given as an example only.

It does not exist in the schema.


Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com

© 2014 Novell