Posts
17/02/2009
[devmedia .net]
E aí Sidnei tudo bem ?
Cara, é o seguinte...
Existem duas formas simples para restringir acessos a pastas/arquivos de um site..
1° Utilizando Membership Profiles -> justamente a maneira que você fez, utilizando a ferramenta, você que é muito fácil de fazer e resolve perfeitamente se problema.
2° Pelo código, você mesmo fazendas as restrições de acesso toda via código, que dá mais trabalho.
Já que está utilizando o Membership para cadastrar usuários e login, não vejo necessidade de controlar pelo site, e sinceramente, ou você utiliza um ou outro, pois vai por mim, vai virar uma salada o código, uma parte por membership e outra por código, isso não é um boa prática.
Por quê utilizar restrição via código se já tem pelo membership ??
Caso queira utilizar mesmo a restrição pelo código você pode fazer o seguinte :
Primeiro altere meu Web.Config. O modo de autenticação continua o mesmo, Authenticantion mode = Forms, porém não definimos mais uma página padrão para acesso. Podemos criar várias ou mesmo a mesma página anteriormente utilizada.
Nesta página de Login, direcionar o sujeito através da forma abaixo, com Response Redirect:
FormsAuthentication.SetAuthCookie(user.Text, True)
Response.Redirect("sec/index.aspx")
Você também precisará desabilitar o Web.Config existente no diretório seguro, ou seja, não precisa mais existir.
Entretanto, para cada página que está na área segura, você terá que iniciar com
Sub Page_Load(ByVal obj As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
If Not Request.IsAuthenticated Then Response.Redirect("../mensagem.aspx")
.
.
.
End if
End Sub
Neste caso você pode personalizar diversas páginas distintas para cada tipo de usuário. No caso estou redirecionando para a página mensagem.aspx, mas poderia ser para qualquer uma outra e não a página do login.
Esta solução é bastante útil quando utilizamos vários domínios diferentes sob uma mesma conta no provedor, pois podemos criar páginas de Login também personalizadas para cada Webpage, em cada domínio ou sub-domínio, além de ser mais flexível.
A única desvantagem é adicionar o código em cada página.
Aguardo seu retorno
Abraços
Carlos Jr
Bom Dia Carlos
Nos encontramos novamente.
Bem, voce disse que a ferramenta WSAt e melhor de se utilizar e talvez por ser meu primeiro projeto eu talvez nao consiga compartilhar da mesma opiniao que voce.
Quando o sistema estiver no ar, o administrador do site que na verdade sera apenas mais um usuario, ira definir as pastas que cada usuario podera acessar.Na verdade ele nem ira saber que existem pastas,simplesmente opcoes do menu que so podem ser acessadas pelo administrador, serao colocadas no grupo admnistrador, do financeiro pelos usuarios do financeiro e assim por diante.
Logo eu so poderia usar a ferramenta se eu mesmo fosse definir quem vai acessar o que e nao necessariamente, serei eu a fazer isso.Dai a razao por nao utilizar a ferramente do VS 2005.
Se eu estiver errado, por favor me corrija, afinal ainda estou meio perdido.
Outro detalhe que eu esqueci de mencionar e o seguinte.
Dependendo do usuario que for se logar, ele tera direito a acessar determinadas opcoes.
Eu quero que os usuarios do Grupo financeiro sejam redirecionados imediatamente para a pagina do financeiro e usuarios do Grupo operacional, vao imediatamente para a pagina do operacional.
Posso fazer assim?
Quando ele efetuar o Login e clicar no botao para entrar, sera feita a consistencia abaixo:
If Roles.IsUserInRole("Operacional") Then
Response.Redirect("Operacional.aspx")
'End If
If Roles.IsUserInRole("Financeiro") Then
Response.Redirect("Financeiro.aspx")
'End If
A linha abaixo FormsAuthentication... faz o que exatamente? Grava o nome do usuario em um cookie?
Pergunto porque eu nao gostaria de usar cookies nesse meu primeiro projeto.
Simplesmente porque seria mais um item a ter que analisar.Claro que no futuro eu pretendo utiliza-los, pois sao muito uteis.
FormsAuthentication.SetAuthCookie(user.Text, True)
E eu tambem preciso restringir as opcoes do menu, para que cada usuario enxergue apenas as opcoes que lhe sao cabiveis.
Obrigado
Sidnei
18/02/2009
[devmedia .net]
Opa, blz Sidnei..
Exatamente como falou, terá que redirecionar os usuários dessa maneira,
fazendo isso na master page fará apenas uma vez... caso contrário terá que colocar em todas as páginas...
Se não for para usar a ferramenta do .net, você terá que fazer na mão mesmo..
E como funciona, tentarei explicar :
antes disso eu não indico fazer dois tipos de controle de usuário, um pelo membership e outra parte "na mão", mas vai da necessidade de cada um...
Vamos lá:
Para restringir acesso aos itens de menu, você deverá criar seu menu dinamicamente,
sendo que todas as informações virão da base de dados, o nome do menu, o link e etc.. tem que estar cadastrado em uma tabela...
TABELA DE MENU (AutoRelacionamento - se relaciona com ela mesmo)
id
IdPai
NomeLink
EnderecoLink
1
1
--
2
1
pai 1
3
1
pai 2
4
1
pai3
5
1
pai4
6
2
Filho 1
7
2
filho1
8
3
filho 2
9
3
filho 2
Depois de criada a tabela de menu, terá que criar uma outra tabela contendo informações do usuário e menu que ele tem acesso, nessa tabela você colocará o código do usuário e o código do item de menu que ele terá acesso.
TABELA DE USUARIO X MENU (Relaciona o item de menu com o usuário)
A = Ativo / I = Inativo
idUsuario
IdMenu
Status
1
1
A
2
1
I
3
1
I
4
1
A
Quando o usuário logar no sistema você irá montar o menu dinamicamente, buscando as informações nas tabelas, mas somente as que o usuário terá acesso, você terá que fazer um JOIN entre essas tabelas para conseguir essa informação. Parece complicado , mas não é..
QUERY PARA BUSCAR O MENU DE ACORDO COM O USUÁRIO
SELECT TABELA_MENU.nomelink, TABELA_MENU.enderecoLink
FROM TABELA_USUARIO_MENU
JOIN TABELA_MENU
ON TABELA_USUARIO_MENU.IDMENU = TABELA_MENU.IDMENU
AND TABELA_USUARIO_MENU.STATUS = 'A'
WHERE
TABELA_USUARIO_MENU.IDUSUARIO = 10 (código do usuário que está logando)
É a maneira que tem pra fazer, e você utilizará a mesma estrutura para dizer se o usuário tem acesso a determinada página ou não , mas pense comigo, se não aparece no menu, ele não terá conhecimento da página, portanto , não precisa restringir o acesso às páginas, sacou !?
Caso não queira fazer dessa maneira, terá que fazer com as ferramentos do .net mesmo, pois na mão só existe esse tipo de acesso.
Pois terá que ficar criando items de menu, acesso a pastas e etc.. e se o administrador não tem a ferramenta, terá que criar na mão e criar uma parte administrativa para ele fazer esse cadastros.
Abraços
Carlos Jr
Bem, acho que um Menu dinamico eu deixarei para o proximo projeto.
Ja estou atrasado nesse projeto atual e entao acho que vou usar o WSAT para ir mais rapido.
Bem, daqui a pouco voltarei, para falar um pouco mais sobre esse assunto.
Alias tenho que ser rapido, pois acho que o meu suporte terminara na proxima semana.
Um Abraco
Sidnei
18/02/2009
[devmedia .net]
Ok Sidnei, fique à vontade para nos contactar...
Espero sempre poder ajudá-lo, mas esse seu problema realmente é mais complicao de se resolver,
e é necessário essa grande manobra de criação de tabelas e etc...
Aguardo um novo contato seu,
espero tê-lo atendido bem,
caso contrário ficamos abertos à sugestões, críticas e reclamações,
assim poderemos sempre estar melhorando nossos serviços para melhor atendê-lo.
Abraços
PS: Posso fechar seu chamado ?
Carlos Jr
Nao, ainda nao pode fecha-lo, pois eu ainda tenho algumas perguntas a fazer.
Estou mexendo nessa rotina de permissoes de acesso e ja vi que tenho algumas duvidas mas ainda nao formulei as perguntas.
Ja vi que no arquivo Web.SiteMap eu posso definir as roles para as quais determinada opcao do menu estara acessivel, digo liberada para o usuario e outras coisas mais.Primeiro irei experimenta-las e ver o que acontece e depois postarei.
E ja que voce falou em criticas, aqui vai uma.
Digamos que e um saco ter que digitar toda hora esse codigo de confirmacao, apenas para voce responder uma pergunta/resposta.
Um Abraco
Sidnei
18/02/2009
[devmedia .net]
Oi Sidnei,
Fique à vontade para fazer críticas e sugestões,
os responsáveis pelo sistema de chamados já estão analisando sua reclamação e eu lhe darei um retorno.
Quanto ao chamado, eu aguardo seu retorno,
no que precisar cara, conte comigo, estou aqui para lhe ajudar e eu não ficarei satisfeito se não resolver seu problema.
Você consegue colocar as restrições sim pelo sitemap , mas foge do que você deseja que é não utilizar a aplicação do Visual Studio para administrar o site...
No aguardo
Abraços
Carlos Jr
Sidnei,
com relação a sua sugestão, estamos trabalhando nela.
Desde já agradecemos pela sua compreensão
19/02/2009
[devmedia .net]
Oi Sidnei, blz ?
estou aguardando seu retorno, para darmos continuidade ao chamado.
Abraços
Carlos Jr
ok, obrigado
Ainda estou resolvendo esse assunto.
Um Abraco
21/02/2009
[devmedia .net]
Sidnei, tudo bem ?
Não posso deixar o chamado aberto, sem andamento...
Aguardo seu contato,
caso contrário terei que fechar o mesmo...
Abraços
Carlos Jr
Boa Tarde Carlos, como vai?
Eu nao tenho entrado aqui nos ultimos por isso nao respondi, eu estava mais preocupado em resolver outros problemas.
Acredito ter resolvido temporariamente esse problema.
Voce pode encerrar o chamado, se bem que me parece que ele ja estava concluido quando entrei.
Obrigado e um Abraco
Sidnei