protected void Roles_ListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        // primero que todo, limpiamos cualquier selección que exista en el treeview

        foreach (TreeNode MyTreeNode in TreeView1.Nodes)
        {
            if (MyTreeNode.Checked)
            {
                MyTreeNode.Checked = false;
            }

            LimpiarSeleccion_NodosEnTreeView(MyTreeNode);
        }

        if (Roles_ListBox.SelectedIndex == -1)
        {
            return;
        }

        // leemos las funciones asociadas al rol (puede haber ninguna!) y las marcamos en el treeview

        dbGeneralDataContext dbGenerales = new dbGeneralDataContext();

        var query = from q in dbGenerales.Roles_FuncionesAplicacions
                    where q.RoleName == Roles_ListBox.SelectedValue
                    select q;

        List <String> MyRoles_List = new List <String>();

        foreach (var MyRol_Funciones in query)
        {
            MyRoles_List.Add(MyRol_Funciones.FunctionName);
        }

        dbGenerales = null;

        if (query.Count() > 0)
        {
            // buscamos cada nodo en la lista de funciones definidas para el rol en la base de datos.
            // Si lo encontramos, lo marcamos

            foreach (TreeNode MyTreeNode in TreeView1.Nodes)
            {
                if (MyRoles_List.Contains(MyTreeNode.Text))
                {
                    MyTreeNode.Checked = true;
                }

                CheckFunctionForRole_NodosEnTreeView(MyTreeNode, MyRoles_List);
            }
        }
    }
    private void ProcesarNodosEnTreeView(TreeNode MyTreeNode, dbGeneralDataContext MydbGeneralDataContext, out bool bError, out String sErrMessage)
    {
        bError      = false;
        sErrMessage = "";

        Roles_FuncionesAplicacion MyRole_FuncionesAplicacion;

        foreach (TreeNode MyTreeNode_Child in MyTreeNode.ChildNodes)
        {
            if (MyTreeNode_Child.Checked)
            // registramos el nodo en la tabla
            {
                MyRole_FuncionesAplicacion = new Roles_FuncionesAplicacion();

                MyRole_FuncionesAplicacion.RoleName     = Roles_ListBox.SelectedValue;
                MyRole_FuncionesAplicacion.FunctionName = MyTreeNode_Child.Text;

                MydbGeneralDataContext.Roles_FuncionesAplicacions.InsertOnSubmit(MyRole_FuncionesAplicacion);
                try
                {
                    MydbGeneralDataContext.SubmitChanges();
                }
                catch (Exception ex)
                {
                    ErrMessage_Span.InnerHtml        = "Ha ocurrido un error al intentar efectuar una operación en la base de datos.<br />El mensaje específico de error es: " + ex.Message;
                    ErrMessage_Span.Style["display"] = "block";

                    bError      = true;
                    sErrMessage = ex.Message;
                    return;
                }
            }

            ProcesarNodosEnTreeView(MyTreeNode_Child, MydbGeneralDataContext, out bError, out sErrMessage);

            if (bError)
            {
                // ocurrió un error en la ejecución (recursiva) de la función
                return;
            }
        }
    }
    protected void RegistrarAsociaciones_Button_Click(object sender, EventArgs e)
    {
        // el usuario debe haber seleccionado un rol

        if (Roles_ListBox.SelectedIndex == -1)
        {
            ErrMessage_Span.InnerHtml        = "Ud. debe seleccionar un rol al cual asociar las funciones.";
            ErrMessage_Span.Style["display"] = "block";

            return;
        }

        // primero eliminamos las funciones que ahora existen para el rol

        dbGeneralDataContext dbGeneral = new dbGeneralDataContext();

        var query = from q in dbGeneral.Roles_FuncionesAplicacions
                    where q.RoleName == Roles_ListBox.SelectedValue
                    select q;

        foreach (var MyRolesFunciones in query)
        {
            dbGeneral.Roles_FuncionesAplicacions.DeleteOnSubmit(MyRolesFunciones);

            try
            {
                dbGeneral.SubmitChanges();
            }
            catch (Exception ex)
            {
                ErrMessage_Span.InnerHtml        = "Ha ocurrido un error al intentar efectuar una operación en la base de datos.<br />El mensaje específico de error es: " + ex.Message;
                ErrMessage_Span.Style["display"] = "block";

                return;
            }
        }

        // recorremos los nodos seleccionados en el treeview y los guardamos en la tabla
        // Roles_FuncionesAplicacion para el rol seleccionado

        bool   bError;
        String sErrMessage;

        Roles_FuncionesAplicacion MyRole_FuncionesAplicacion;

        foreach (TreeNode MyTreeNode in TreeView1.Nodes)
        {
            if (MyTreeNode.Checked)
            // registramos el nodo en la tabla
            {
                MyRole_FuncionesAplicacion = new Roles_FuncionesAplicacion();

                MyRole_FuncionesAplicacion.RoleName     = Roles_ListBox.SelectedValue;
                MyRole_FuncionesAplicacion.FunctionName = MyTreeNode.Text;

                dbGeneral.Roles_FuncionesAplicacions.InsertOnSubmit(MyRole_FuncionesAplicacion);

                try
                {
                    dbGeneral.SubmitChanges();
                }
                catch (Exception ex)
                {
                    ErrMessage_Span.InnerHtml        = "Ha ocurrido un error al intentar efectuar una operación en la base de datos.<br />El mensaje específico de error es: " + ex.Message;
                    ErrMessage_Span.Style["display"] = "block";

                    return;
                }
            }

            ProcesarNodosEnTreeView(MyTreeNode, dbGeneral, out bError, out sErrMessage);

            if (bError)
            {
                // ocurrió un error en la ejecución (recursiva) de la función
                ErrMessage_Span.InnerHtml        = "Ha ocurrido un error en la ejecución de este proceso.<br />El mensaje específico obtenido para el error es: " + sErrMessage;
                ErrMessage_Span.Style["display"] = "block";

                return;
            }

            Message_Span.InnerHtml        = "Ok, las funciones han sido asociadas al rol seleccionado.";
            Message_Span.Style["display"] = "block";
        }
    }
示例#4
0
    private void AppMenu_EnableMenuFunctionsForUser()
    {
        // -------------------------------------------------------------------------------------------
        // operaciones necesarias para autorizar al usaurio las diferentes opciones del menú

        String[] sRolesForUser;

        sRolesForUser = Roles.GetRolesForUser(User.Identity.Name);

        // si el usuario no tiene roles, continuamos

        if (sRolesForUser.Count() == 0)
        {
            return;
        }

        if (sRolesForUser.ToList().Contains("Administradores"))
        {
            // si el usuario es administrador, continuamos sin procesar roles
            return;
        }

        dbGeneralDataContext dbGenerales            = new dbGeneralDataContext();
        List <String>        MenuFunctionNames_List = new List <String>();

        for (Int16 i = 0; i < sRolesForUser.Count(); i++)
        {
            // agregamos a una lista las opciones del menú definidas para los roles en los cuales
            // participa el usuario

            var query = from q in dbGenerales.Roles_FuncionesAplicacions
                        where q.RoleName == sRolesForUser[i]
                        select new { q.FunctionName };

            foreach (var MenuFunctionName_obj in query)
            {
                MenuFunctionNames_List.Add(MenuFunctionName_obj.FunctionName);
            }
        }

        dbGenerales = null;

        if (MenuFunctionNames_List.Count() == 0)
        {
            // el usuario pertenece a roles pero que no tienen funciones (???!!)
            return;
        }

        // con las funciones permitidas al usuario en una lista, recorremos el menú y activamos solo
        // esas opciones

        Menu1.DataBind();

        // primero desabilitamos todas las opciones; más abajo, habilitamos solo las que correspondan

        foreach (MenuItem MyMenuItem in Menu1.Items)
        {
            DesabilitarMenuItem(MyMenuItem);
        }

        // recorremos el menú para mostrar solo las opciones permitidas el (los) role al cual
        // corresponde el usuario

        foreach (MenuItem MyMenuItem in Menu1.Items)
        {
            ProcessMenuItem(MyMenuItem, MenuFunctionNames_List);
        }
    }