Bom dia.
Fiz um menu de uma forma diferente e com uma boa segurança e bem simples, acho que para alguns pode ser uma coisa nova e mais segura e para outros um pouco trabalhoso, mas enfim espero que ajudei alguém.
Toda vez que clicar em algum menu ele vai verificar se tem acesso ou seja se algum menu for escrito fisicamente de um outro aspx que tem no seu sistema vai ser direcionado para a tela de login.
//classe para pegar url e pega apenas o texto que é necessario
VerificarUrl verUrl = new VerificarUrl();
protected void Page_Load(object sender, EventArgs e)
{
//Tempo estimulado pra voltar pra tela de login
Response.AppendHeader("Refresh", String.Concat((Session.Timeout * 60), ";URL=/LoginNew.aspx"));
string lastURL = String.Empty;
//pega a url do menu ao clicar
if (Request.ServerVariables["Path_info"] != null)
{
foreach (Char URL in Request.ServerVariables["Path_info"])
{
lastURL += URL;
}
//joga a url na classe para ser tratada
//passa callphoneadm.telecall.com/VerificarNum.aspx
verUrl.setEnd(lastURL);
}
Classe
public class VerificarUrl
{
public string retornaUrl = "";
public void setEnd(string Url)
{
string[] splitBarra = Url.Split('/');
string[] splitPonto = splitBarra.Last().Split('.');
//resultado = louco
this.retornaUrl= splitPonto[0];
}
public string getUrl()
{
return this.retornaUrl;
}
}
O nome do menu tem que ser inserido em uma tabela, vamos dizer que a pagina é " principal.apsx ", então o id do ul tem que ser ulprincipal e tem que inserir esse nome em uma tabela "permissao".Quando o cliente logar ele vai
na tabela verificar as permissão que ele tem tudo separado por (,).
Ex: tipo de permissao: clienteNormal -> uldetalhamentotarifa,ulconsultasimples,ulchamadas.
quando ele logar vai aparecer apenas 3 menus que são os aspxs:
detalhamentotarifa.aspx
consultasimples.apsx
chamadas.aspx
ArrayList Arryurl = new ArrayList();
string verificar = "";
string validar = "";
int contador= 0;
//transforma a string em control(ID das ULs)
foreach (string funcaoValores in valores)
{
validar = funcaoValores.Trim();
Control control = FindControl(validar);
control.Visible = true;
Arryurl.Add(validar);
}
// pega todos as opçoes relacionado ao cliente de acesso
//Verificar se o cliente está tentando logar em um endereço que não tem permissão
//Caso ele digite um endereço que sejá diferente da permissão dele a tela vai para tela principal
for (int i = 0; Arryurl.Count > i; i++)
{
verificar = Arryurl[i].ToString();
if (EndUrl != "ulPrincipal")
{
if (verificar == EndUrl)
{
contador = 1;
}
}
}
if (EndUrl != "ulPrincipal")
{
//se contador for igual 0 que dizer que ele tentou logar uma tela que não tem permissão
if (contador != 1)
{
Response.Redirect("Principal.aspx");
}
}
Agradeço sempre pela ajuda dos colaboradores e espero que sirva pra alguém.