//evento pre-definido
        private void PreRequestHandlerExecute(Object source, EventArgs e)
        {
            //obtem dados da aplicacao http (site)
            application = (HttpApplication)source;
            context = application.Context;
            //obtem o nome do arquivo que está sendo acessado
            string origem = context.Request.FilePath;
            if (!origem.Contains("aspx") || origem.Contains("WebForm1") || origem.Contains("Rel") || origem.Contains("default.aspx") || origem.Contains("Pesquisar.aspx") || origem.Contains("PesquisarItens.aspx") || origem.Contains("recuperacaoLogin.aspx") || origem.Contains("ops.aspx"))
            {
                return;
            }
            //se houver usuario logado, e o site já estiver carregado
            //verifica qual é o usuario para definir permissoes de acesso
            //se nao houver usuário logado, sempre direciona para a tela de login
            if (context.Session != null && context.Session["usuario"] == null)
            {
                //somente chama a tela de login se a origem nao for a propria tela
                //faz isso, pois no primeira acesso é solicitada a tela de login
                if (!origem.Contains("login.aspx"))
                {
                    //chama a tela de login
                    context.Response.Redirect("~/login.aspx", true);
                }
            }
            else
            {
                //exemplo
                //Cria objeto usuario local, baseado no objeto da sessao
                List<Usuarios> usuarios = (List<Usuarios>)context.Session["usuario"];
                PermissoesBL perBL = new PermissoesBL();

                foreach (Usuarios ltUsu in usuarios)
                {
                    List<Permissoes> permissoes = perBL.PesquisarBL(ltUsu.CategoriaId, origem);

                    if (permissoes.Count == 0 && !origem.Contains("erroPermissao.aspx"))
                    {
                        context.Session["usuPermissoes"] = null;
                        context.Response.Redirect("~/erroPermissao.aspx?nomeUsuario=" + ltUsu.Nome, true);
                    }
                    else
                        if (!origem.Contains("erroPermissao.aspx"))
                        {
                            Permissoes per = new Permissoes();

                            per.Editar = permissoes[0].Editar;
                            per.Excluir = permissoes[0].Excluir;
                            per.Inserir = permissoes[0].Inserir;

                            context.Session["usuPermissoes"] = per;
                        }
                }

            }
        }
        private void Pesquisar(int id_cat, string modulo)
        {
            DataTable tabela = new DataTable();

            DataColumn coluna1 = new DataColumn("ID", Type.GetType("System.Int32"));
            DataColumn coluna2 = new DataColumn("CONSULTAR", Type.GetType("System.Boolean"));
            DataColumn coluna3 = new DataColumn("EDITAR", Type.GetType("System.Boolean"));
            DataColumn coluna4 = new DataColumn("INSERIR", Type.GetType("System.Boolean"));
            DataColumn coluna5 = new DataColumn("EXCLUIR", Type.GetType("System.Boolean"));
            DataColumn coluna6 = new DataColumn("FORMULARIOID", Type.GetType("System.Int32"));
            DataColumn coluna7 = new DataColumn("CODFORMULARIO", Type.GetType("System.Int32"));
            DataColumn coluna8 = new DataColumn("DESCFORMULARIO", Type.GetType("System.String"));
            DataColumn coluna9 = new DataColumn("TIPO", Type.GetType("System.String"));
            DataColumn coluna10 = new DataColumn("CATEGORIAID", Type.GetType("System.Int32"));

            tabela.Columns.Add(coluna1);
            tabela.Columns.Add(coluna2);
            tabela.Columns.Add(coluna3);
            tabela.Columns.Add(coluna4);
            tabela.Columns.Add(coluna5);
            tabela.Columns.Add(coluna6);
            tabela.Columns.Add(coluna7);
            tabela.Columns.Add(coluna8);
            tabela.Columns.Add(coluna9);
            tabela.Columns.Add(coluna10);

            FormulariosBL forBL = new FormulariosBL();
            List<Formularios> formularios = forBL.PesquisarBL(modulo);

            PermissoesBL perBL = new PermissoesBL();
            List<Permissoes> permissoes;

            foreach (Formularios formu in formularios)
            {
                DataRow linha = tabela.NewRow();

                linha["FORMULARIOID"] = formu.Id;
                linha["CODFORMULARIO"] = formu.Codigo;
                linha["DESCFORMULARIO"] = formu.Descricao;
                linha["CATEGORIAID"] = id_cat;

                switch (formu.Tipo.ToUpper())
                {
                    case "C":
                        {
                            linha["TIPO"] = "Edição";
                            break;
                        }
                    case "V":
                        {
                            linha["TIPO"] = "Consulta";
                            break;
                        }
                }

                permissoes = perBL.PesquisarBL(id_cat, formu.Id);

                if (permissoes.Count > 0)
                {
                    foreach (Permissoes per in permissoes)
                    {
                        linha["Id"] = per.Id;
                        linha["CONSULTAR"] = per.Consultar;
                        linha["EDITAR"] = per.Editar;
                        linha["INSERIR"] = per.Inserir;
                        linha["EXCLUIR"] = per.Excluir;
                    }
                }
                else
                {
                    linha["Id"] = 0;
                    linha["CONSULTAR"] = false;
                    linha["EDITAR"] = false;
                    linha["INSERIR"] = false;
                    linha["EXCLUIR"] = false;
                }

                tabela.Rows.Add(linha);
            }

            repPermissao.DataSource = tabela;
            repPermissao.DataBind();
        }