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"; } }
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); } }