예제 #1
0
        private void chkListProfile_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            try
            {
                treeProfile.Nodes.Clear();
                this.Entity.Description = txtDescription.Text;

                if (e.NewValue == CheckState.Checked)
                {
                    //Agrega a la lista de elegidos, los permisos seleccionados del listado de permisos disponibles
                    ProfileBM selection = (ProfileBM)((CheckedListBox)sender).SelectedItem;
                    ProfileBM result    = GetPermissionHierarchy(selection);
                    this.Entity.AddPermission(result);
                }
                else
                {
                    //Elimina del listado de permisos a agregar, aquel que coincida con el código
                    ProfileBM selection = (ProfileBM)((CheckedListBox)sender).SelectedItem;
                    this.Entity.DeletePermission(selection.code);
                }

                PopulateTree(treeProfile, this.Entity);
                treeProfile.ExpandAll();
            }
            catch (Exception exception)
            {
                MessageBox.Show("Se ha producido el siguiente error: " + exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
예제 #2
0
        private void treeProfile_AfterCheck(object sender, TreeViewEventArgs e)
        {
            //Cuando el check es true, implica que no se quiere excluir
            ProfileBM profile = e.Node.Tag as ProfileBM;

            profile.excluded = !e.Node.Checked;
        }
예제 #3
0
        private void PopulateTree(TreeView component, ProfileBM element, TreeNode fatherNode = null)
        {
            if (fatherNode == null)
            {
                //Si no posee padre, significa que es root
                fatherNode = new TreeNode(element.Description);
                //se utiliza el tag para almacenar el permiso
                fatherNode.Tag = element;
                component.Nodes.Add(fatherNode);
                fatherNode.Checked = true;
            }

            if (element.IsFather())
            {
                foreach (ProfileBM permission in element.GetChildren())
                {
                    //Creo un nodo y lo vinculo con su padre
                    TreeNode childNode = new TreeNode(permission.Description);
                    fatherNode.Nodes.Add(childNode);
                    //se utiliza el tag para almacenar el permiso
                    childNode.Tag     = permission;
                    childNode.Checked = !permission.excluded;
                    PopulateTree(component, permission, childNode);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Crea un perfil en base al modelo recibido, considerando únicamente los hijos del primer nivel.
        /// </summary>
        /// <param name="profile"></param>
        /// <returns></returns>
        public ResultBM CreateProfile(ProfileBM profile)
        {
            try
            {
                log.AddLogInfo("Creando perfil", "Creando perfil.", this);
                ProfileDAL profileDal    = new ProfileDAL();
                ResultBM   isValidResult = IsValid(profile);

                if (!isValidResult.IsValid())
                {
                    return(isValidResult);
                }

                //Se agrega el root
                PermissionDTO root = new PermissionDTO(profile.fatherCode, profile.code, profile.Description);
                profileDal.SaveProfile(root);
                CreateRelation(profile);

                log.AddLogInfo("Creando perfil", "El perfil se ha creado exitosamente.", this);
                return(new ResultBM(ResultBM.Type.OK, "Perfil creado: " + profile.Description));
            }
            catch (Exception exception)
            {
                log.AddLogCritical("Recuperando perfil", exception.Message, this);
                return(new ResultBM(ResultBM.Type.EXCEPTION, SessionHelper.GetTranslation("SAVING_ERROR") + " " + exception.Message, exception));
            }
        }
예제 #5
0
        /// <summary>
        /// Devuelve la jerarquía de permisos para el elemento seleccionado
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        private ProfileBM GetPermissionHierarchy(ProfileBM selection)
        {
            ProfileBLL profileBll = new ProfileBLL();
            ResultBM   result     = profileBll.GetProfile(selection.code);

            if (!result.IsValid())
            {
                MessageBox.Show(result.description, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            return(result.GetValue() as ProfileBM);
        }
예제 #6
0
        private ResultBM IsValid(ProfileBM profile)
        {
            if (profile.Description.Length == 0)
            {
                return(new ResultBM(ResultBM.Type.INCOMPLETE_FIELDS, SessionHelper.GetTranslation("EMPTY_FIELD_ERROR") + " (PROFILE NAME)"));
            }

            if (profile.GetChildren().Count == 0)
            {
                return(new ResultBM(ResultBM.Type.INCOMPLETE_FIELDS, SessionHelper.GetTranslation("NO_PERMISSION_ASSIGNED_ERROR")));
            }

            return(new ResultBM(ResultBM.Type.OK));
        }
예제 #7
0
        /// <summary>
        /// Inicia la sesión, lo que implica almacenar los datos del usuario y su configuración (idioma y permisos).
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public static SessionHelper StartSession(UserBM userMdl, ProfileBM profileMdl, LanguageBM languageBm)
        {
            if (instance == null)
            {
                instance                        = new SessionHelper();
                instance.userMdl                = userMdl;
                instance.profileMdl             = profileMdl;
                instance.languageBm             = languageBm;
                instance.suscriptorsToTranslate = new Dictionary <object, string>();
                ConvertIntoList(languageBm);
            }

            //No sé si se necesita porque no opero actualmente con la sesion
            return(instance);
        }
예제 #8
0
 private void chkListProfile_SelectedIndexChanged(object sender, EventArgs e)
 {
     //Muestra la composición jerárquica del permiso seleccionado
     try
     {
         //Se le asigna el valor el entity para tenerlo disponible al momento de guardado
         ProfileBM selection = (ProfileBM)((CheckedListBox)sender).SelectedItem;
         ProfileBM result    = GetPermissionHierarchy(selection);
         treeDescription.Nodes.Clear();
         PopulateTree(treeDescription, result);
         treeDescription.ExpandAll();
     }
     catch (Exception exception)
     {
         MessageBox.Show("Se ha producido el siguiente error: " + exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
 }
예제 #9
0
        /// <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);
                }
            }
        }
예제 #10
0
        public ResultBM UpdateProfile(ProfileBM profile)
        {
            try
            {
                log.AddLogInfo("Actualizando perfil", "Creando perfil.", this);
                ProfileDAL profileDal    = new ProfileDAL();
                ResultBM   isValidResult = IsValid(profile);

                if (!isValidResult.IsValid())
                {
                    return(isValidResult);
                }
                profileDal.DeleteRelation(profile.code);
                CreateRelation(profile);

                log.AddLogInfo("Actualizando perfil", "El perfil se ha actualizado exitosamente.", this);
                return(new ResultBM(ResultBM.Type.OK, "Perfil actualizado."));
            }
            catch (Exception exception)
            {
                log.AddLogCritical("Recuperando perfil", exception.Message, this);
                return(new ResultBM(ResultBM.Type.EXCEPTION, SessionHelper.GetTranslation("UPDATING_ERROR") + " " + exception.Message, exception));
            }
        }