/// <summary> /// Inserta las relaciones en la base de datos /// </summary> /// <param name="relations"></param> private void CreateRelation(ProfileBM root) { List <PermissionDTO> permissions = new List <PermissionDTO>(); ProfileDAL profileDal = new ProfileDAL(); List <ProfileBM> toAnalyse = null; List <PermissionDTO> toExclude = new List <PermissionDTO>(); List <ProfileBM> relations = root.GetChildren(); log.AddLogDebug("Creando relaciones", "Creando relaciones para el perfil " + root.Description + ".", this); //Cada elemento de primer nivel, representan los roots de las distintas jerarquías de los permisos //La relación con los hijos es por exclusion, es decir, se mostrarán todos a menos que se encuentren en la tabla de exclusiones foreach (ProfileBM permission in relations) { //Creo la relación con el padre inmediato permissions.Add(new PermissionDTO(permission.fatherCode, permission.code, permission.Description)); } log.AddLogDebug("Creando relaciones", "Agregando relaciones Perfil - Permisos.", this); profileDal.SaveProfileRelation(permissions); foreach (ProfileBM permission in relations) { toAnalyse = permission.GetAlldescendants(); //Agrego al padre en la lista que debe ser analizada para la exclusión toAnalyse.Add(permission); foreach (ProfileBM item in toAnalyse) { if (item.excluded) { toExclude.Add(new PermissionDTO(item.fatherCode, item.code, item.Description)); } } if (toExclude.Count > 0) { log.AddLogDebug("Creando relaciones", "Agregando relaciones Perfil - Exclusiones.", this); profileDal.SaveProfileExclusionRelation(root.Code, toExclude); } } }