Código de ejemplo para trabajar con usuarios, grupos, miembros de grupos y pertenencia a grupos

Utilice el código de ejemplo completo y los gráficos de datos para realizar operaciones básicas que impliquen usuarios, grupos, miembros de grupos y pertenencia a grupos.

En este escenario de ejemplo se incluyen los pasos siguientes:

  1. Cree un usuario añadiendo una entidad de tipo PersonAccount utilizando el método create.
  2. Cree un grupo añadiendo una entidad de tipo Group utilizando el método create.
  3. Añada el usuario al grupo utilizando el método update.
  4. Obtenga los miembros del grupo utilizado el método get y GroupMemberControl.
  5. Obtenga los grupos a los que pertenece el usuario (pertenencia a grupos) utilizando el método get y GroupMembershipControl.
  6. Elimine el usuario del grupo utilizando el método update y GroupMemberControl. Para el código para eliminar el usuario de un grupo utilizando GroupMembershipControl, consulte el tema Código de ejemplo para eliminar usuarios de un grupo.
  7. Suprima el usuario utilizando el método delete.
  8. Suprima el grupo utilizando el método delete.

Requisitos previos

Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación.

Código de ejemplo

Añada el siguiente código de ejemplo completo al código de aplicación y sustituya las variables por los valores reales que desea utilizar.

public class UserAndGroupSample extends BaseApp
{
    // Definir DN de usuarios y grupos
    private static String user1Dn = "uid=user1,o=defaultWIMFileBasedRealm";
    private static String user2Dn = "uid=user2,o=defaultWIMFileBasedRealm";
    private static String group1Dn = "cn=group1,o=defaultWIMFileBasedRealm";
    private static String group2Dn = "cn=group2,o=defaultWIMFileBasedRealm";
    private static String EJB_JNDI_NAME = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";

    /** 
     *  En este ejemplo se realizan las siguientes operaciones:
     *  Crea un usuario
     *  Crea un grupo
     *  Asigna el usuario al grupo
     *  Obtiene los miembros de grupo
     *  Obtiene la pertenencia a grupos
     *  Elimina el usuario del grupo
     *  Suprime un usuario
     *  Suprime un grupo
     */
    public static void main(String[] args) throws Exception
    {
        // Inicializar el servicio del perfil
        locateService(EJB_JNDI_NAME);
        // Crear un usuario y grupo respectivamente
        addPersonAccount("user1","user1cn","user1sn");
        addGroup("group1");
        // Añadir el miembro user1 al grupo
        addMemberToGroup(user1Dn,group1Dn);
        // Obtener los miembros de grupo
        getGroupMembers(group1Dn);
        // Obtener la pertenencia a grupos
        getGroupMembership(user1Dn);
        // Eliminar el miembro user1 del grupo
        removeMemberFromGroup(user1Dn,group1Dn);
        // Suprimir user1
        deleteEntity(user1Dn);
        // Suprimir group1
        deleteEntity(group1Dn);
    }
	
    /** 
     *  addPersonAccount 
     *  Añade una entidad del tipo de entidad PersonAccount
     *  @param uid valor que debe establecerse
     *  @param cn valor que debe establecerse
     *  @param sn valor que debe establecerse
     */
    public static void addPersonAccount(String uid, String cn, String sn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null,
                    SchemaConstants.DO_PERSON_ACCOUNT);
            // Establece las propiedades de la persona
            entity.set("uid", uid);
            entity.set("cn", cn);
            entity.set("sn", sn);
            System.out.println("Input data graph before creating user"+ printDO(root));
            // Crear la entidad PersonAccount
            root = service.create(root); 
            System.out.println("Output data graph after creating user"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }
    
    /**
     *  addGroup Añade una entidad del tipo Group
     *  @param cn valor que debe establecerse
     */
    public static void addGroup(String cn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Establecer el cn del grupo
            entity.set("cn", cn);
            System.out.println("Input data graph before creating group"+ printDO(root));
            // Crear la entidad de grupo
            root = service.create(root); 
            System.out.println("Output data graph after creating group"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }

    /**
     *  addMemberToGroup añade un usuario al grupo
     *  @param memberDn uniqueName del miembro
     *  @param groupDn uniqueName del grupo
     */
    public static void addMemberToGroup(String memberDn, String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Establecer el uniqueName de grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            DataObject member1 = SDOHelper.createDataObject(SchemaConstants.WIM_NS_URI, 
                    SchemaConstants.DO_ENTITY);
            // Establecer el uniqueName de miembro
            member1.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME,
                    memberDn);
            // Añadir el miembro al grupo
            entity.getList(SchemaConstants.DO_MEMBERS).add(member1);
            System.out.println("Input datagraph before adding member to group"+ printDO(root));
            // Actualizar el grupo
            root = service.update(root);            System.out.println("Output datagraph after adding member to group"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }
    
    /**
     *  getGroupMembers Devuelve los miembros del grupo
     *  @param groupDn uniqueName del grupo
     */
    public static void getGroupMembers(String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Establecer el uniqueName de grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            // Establecer el control de propiedad
            DataObject propCtrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_PROPERTY_CONTROL);
            //Recupera el cn del grupo cuyos miembros deben buscarse
            propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            // Establecer el control de miembro de grupo
            DataObject grpMbrCtrl = SDOHelper.createControlDataObject(root, null,
                    SchemaConstants.DO_GROUP_MEMBER_CONTROL); 
            // Recuperar los atributos cn y uid para todos los miembros
            grpMbrCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            grpMbrCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
            System.out.println("Input data graph before getting group members"+ printDO(root));
            // Obtener los miembros del grupo
            root = service.get(root);		            System.out.println("Output data graph after getting group members"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }

    /**
     *  getGroupMembership Obtiene los grupos a los que pertenece el usuario
     *  @param memberDn uniqueName del usuario
     */
    public static void getGroupMembership(String memberDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null,
                    SchemaConstants.DO_PERSON_ACCOUNT);
            // Establecer el uniqueName del grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME, 
                    memberDn);
            // Establecer el control de pertenencia a grupos
            DataObject grpMbrshipCtrl = SDOHelper.createControlDataObject(root, null,
                    SchemaConstants.DO_GROUP_MEMBERSHIP_CONTROL);
            // Establecer la propiedad de nivel para recuperar todas las entidades anidadas
            grpMbrshipCtrl.setInt(SchemaConstants.PROP_LEVEL, SchemaConstants.PROP_LEVEL_NESTED);
            // Recuperar atributo cn para todos los grupos
            grpMbrshipCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            System.out.println("Input data graph before getting group membership of user"+ printDO(root));
            // Obtener los miembros del grupo
            root = service.get(root);		            System.out.println("Output data graph after getting group membership of user"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }
    
    /**
     *  removeMemberFromGroup Elimina el usuario del grupo
     *  @param memberDn uniqueName del usuario
     *  @param groupDn uniqueName del grupo
     */
    public static void removeMemberFromGroup(String memberDn, String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Establecer el uniqueName del grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            DataObject member1 = SDOHelper.createDataObject(SchemaConstants.WIM_NS_URI, 
                    SchemaConstants.DO_ENTITY);
            // Establecer el uniqueName de miembro que debe eliminarse
            member1.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME,
                    memberDn);
            // Recuperar el miembro para eliminarlo del grupo
            entity.getList(SchemaConstants.DO_MEMBERS).add(member1);
            // Establecer el control de miembro de grupo
            DataObject grpMbrCtrl = SDOHelper.createControlDataObject(root, null,
                    SchemaConstants.DO_GROUP_MEMBER_CONTROL);
            // Modalidad de desasignación para eliminar el miembro del grupo
            grpMbrCtrl.setInt(SchemaConstants.PROP_MODIFY_MODE, SchemaConstants.VALUE_MODIFY_MODE_UNASSIGN);
            System.out.println("Input datagraph before removing member from group"+ printDO(root));
            // Actualizar el grupo para eliminar el miembro
            root = service.update(root);            System.out.println("Output datagraph after removing member from group"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }

    /**
     *  deleteEntity Suprime la entidad indicada
     *  @param entityName
     */
    public static void deleteEntity(String entityName)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_ENTITY);
            // Establecer el control de supresión
            DataObject ctrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_DELETE_CONTROL);
            // Establecer la propiedad de retorno después de suprimir
            ctrl.setBoolean(SchemaConstants.PROP_RETURN_DELETED, true);
            // Establecer el uniqueName de la entidad que debe suprimirse
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    entityName);
            System.out.println("Input data graph before deleting entity"+ printDO(root));
            // Suprimir la entidad
            root = service.delete(root);            System.out.println("Output data graph after deleting entity"+ printDO(root));
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }
    }
}

Gráficos de datos de entrada y salida

A continuación se proporcionan los gráficos de datos de entrada y los gráficos de datos de salida resultantes para cada paso de este ejemplo.

Gráfico de datos de entrada para crear un usuario, es decir, una entidad de tipo PersonAccount:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:uid>user1</wim:uid>
      <wim:cn>user1cn</wim:cn>
      <wim:sn>user1sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de crear un usuario:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para crear un grupo, es decir una entidad de tipo Group:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:cn>group1</wim:cn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de crear un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para añadir un usuario a un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:members>
        <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      </wim:members>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de añadir un usuario a un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para obtener los miembros de un grupo con GroupMemberControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:PropertyControl">
      <wim:properties>cn</wim:properties>
    </wim:controls>
    <wim:controls xsi:type="wim:GroupMemberControl">
      <wim:properties>cn</wim:properties>
      <wim:properties>uid</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de obtener los miembros de un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:cn>group1</wim:cn>
      <wim:members xsi:type="wim:PersonAccount">
        <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
        <wim:uid>user1</wim:uid>
        <wim:cn>user1cn</wim:cn>
      </wim:members>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para obtener los grupos a los que pertenece un usuario (pertenencia a grupos) con GroupMembershipControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:GroupMembershipControl">
      <wim:properties>cn</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de obtener los grupos a los que pertenece un usuario:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      <wim:groups>
        <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
        <wim:cn>group1</wim:cn>
      </wim:groups>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para eliminar un miembro de un grupo con GroupMemberControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:members>
        <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      </wim:members>
    </wim:entities>
    <wim:controls xsi:type="wim:GroupMemberControl" modifyMode="3"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de eliminar un miembro de un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para suprimir un usuario:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities>
      <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:DeleteControl" returnDeleted="true"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de suprimir un usuario:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para suprimir un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities>
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:DeleteControl" returnDeleted="true"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de suprimir un grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Condiciones de uso | Comentarios