martes, 11 de diciembre de 2012

Usuarios y Roles de seguridad

Hola, hoy voy a poner un par de ejemplos de como trabajar con los temas de los roles de seguridad y los usuarios con un par de métodos que suelen ser necesarios.
Frecuentemente necesitamos consultar que usuarios tienen un rol o que roles tiene un usuario determinado. Los roles de seguridad tienen un funcionamiento un poco extraño. Al crearnos un nuevo rol de seguridad, en realidad se duplica el rol por cada una de las unidades de negocio que hay en el sistema. Por esto hay que tener mucho cuidado, ya que si nuestro sistema tiene una gran cantidad de unidades de negocio (mas de mil, por ejemplo), con cada rol que creemos, en realidad se irán creando mil registros. Esto provoca que todo el sistema se ralentice mucho, así que hay que tener mucho cuidado de no crear grandes volúmenes de unidades de negocio.
A continuación, detallo un par de métodos que pueden ser útiles para el trabajo con usuarios y sus roles. En realidad son simplemente dos ejemplos que muestran como mediante consultas de tipo “FetchXml”, se puede consultar. Ambos métodos devuelven un objeto de tipo ArrayList con los resultados.

1) Para consultar que roles tiene un usuario (por guid del usuario):

   1: public ArrayList getUserRoles(string User_Guid)

   2:        {
   3:            ArrayList user_roles = new ArrayList();
   4:            StringBuilder fetch2 = new StringBuilder();
   5:            fetch2.Append("<fetch distinct='true' mapping='logical' output-format='xml-platform' version='1.0'> ");
   6:            fetch2.Append(" <entity name='role'>");
   7:            fetch2.Append(" <attribute name='name'/> ");
   8:            fetch2.Append(" <order descending='false' attribute='name'/> ");
   9:            fetch2.Append("     <link-entity name='systemuserroles' intersect='true' visible='false' to='roleid' from='roleid'>");
  10:            fetch2.Append("         <link-entity name='systemuser' to='systemuserid' from='systemuserid' alias='aa'> ");
  11:            fetch2.Append("             <filter type='and'> ");
  12:            fetch2.Append(String.Concat("   <condition attribute='systemuserid' value='{0}' uitype='systemuser' operator='eq'/> ",User_Guid));
  13:            fetch2.Append("             </filter> ");
  14:            fetch2.Append("         </link-entity> ");
  15:            fetch2.Append("     </link-entity> ");
  16:            fetch2.Append(" </entity> ");
  17:            fetch2.Append("</fetch>");
  18:  
  19:            EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2.ToString()));
  20:  
  21:            foreach (var c in result.Entities)
  22:            {
  23:                user_roles.Add(c.Attributes["name"].ToString());
  24:            }
  25:            return user_roles;
  26:        }



2) Para consultar qué usuarios están en un determinado rol (por nombre del rol):


   1: public ArrayList getUserinRole(string Role_Name)
   2:         {
   3:             ArrayList usersinrole = new ArrayList();
   4:             StringBuilder fetch2 = new StringBuilder();
   5:             fetch2.Append("<fetch distinct='true' mapping='logical' output-format='xml-platform' version='1.0'> ");
   6:             fetch2.Append(" <entity name='systemuser'>");
   7:             fetch2.Append(" <attribute name='systemuserid'/> ");
   8:             fetch2.Append("     <link-entity name='systemuserroles' intersect='true' visible='false' to='systemuserid' from='systemuserid'> ");
   9:             fetch2.Append("         <link-entity name='role' to='roleid' from='roleid' alias='aa'> ");
  10:             fetch2.Append("                <filter type='and'> ");
  11:             fetch2.Append(String.Concat("                     <condition attribute='name' value='{0}' operator='eq'/> ",Role_Name));
  12:             fetch2.Append("                 </filter> ");
  13:             fetch2.Append("         </link-entity> ");
  14:             fetch2.Append("     </link-entity>");
  15:             fetch2.Append(" </entity> ");
  16:             fetch2.Append("</fetch>");
  17:  
  18:             EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2.ToString()));
  19:  
  20:             foreach (var c in result.Entities)
  21:             {
  22:                 usersinrole.Add(c.Attributes["systemuserid"].ToString());
  23:             }
  24:             return usersinrole;
  25:         }
 
 

Un saludo,

No hay comentarios:

Publicar un comentario