Exercício em ASP.NET (Agenda) 1 Introdução O exercício será composto basicamente por 3 módulos: - Autenticação/Autorização de Usuários - Menu - Cadastro / Exclusão de contatos Todos os módulos da aplicação só poderão ser acessados por usuários autenticados. 2 Autenticação/Autorização de usuários Esse módulo será o responsável por autenticar o usuário e permitir o acesso a área restrita do site. Mediante o fornecimento das credenciais (nome de usuário e senha) um usuário deverá ser redirecionado a tela de menu, a partir da qual poderá acessar qualquer área do site. Para realizar essa validação de usuário, deverá ser configurado no web.config a autenticação modo Forms e as devidas autorizações como por exemplo: <authentication mode="forms"> <forms loginurl="login.aspx" name="appautentica" timeout="30" path="/"> </forms> </authentication> <authorization> <deny users="?" /> </authorization> É Importante ressaltar que os parâmetros loginurl, name e timeout podem variar de acordo com as definições de cada aplicação. Para realizar a autenticação do usuário, o botão login, deverá conter um código que: - Carregue os parâmetros do SelectCommand (usuário e senha); - Carregue o DataSet com os dados do usuário vindo do banco; - Verifique se a consulta retornou algum registro - Caso tenha retornado, realize a autenticação do usuário e crie as variáveis de sessão, caso necessário; - Caso não tenha retornado nenhum registro, exiba uma mensagem informando que o usuário ou a senha estão incorretos. Exemplo: //Carregando os parâmetros com as informações fornecidas
dtausuarios.selectcommand.parameters["@usuario"].value = txtusuario.text; dtausuarios.selectcommand.parameters["@senha"].value = txtsenha.text; // Carregando o dataset com as informações do usuário if (dtsusuario.tables[0].rows.count > 0) { // Autenticando o usuário FormsAuthentication.SetAuthCookie(txtUsuario.Text, false); // Criando as variáveis de sessão, uma com o nome e outra // com o id Session.Add("nome", dtsusuario.tables[0].rows[0]["nome"].tostring()); Session.Add("id", dtsusuario.tables[0].rows[0]["id"].tostring()); // Redirecionando o usuário para o menu Response.Redirect("menu.aspx"); } else lblmsg.text = "Usuário ou senha inválido!"; 3 Menu O Módulo de menu deverá contar o link para o cadastro/exclusão de contatos e a opção de Logout, permitindo que o usuário possa escolher o que fazer. Para o Link Cadastro/Exclusão de Contatos, recomenda-se a utilização de um componente HyperLink, já para o link de Logout recomenda-se a utilização de um LinkButton, pois ao clicar nesse botão o seguinte código deverá ser executado: // Finaliza a autenticação do usuário FormsAuthentication.SignOut(); // Exclui todas as variáveis de sessão criadas Session.Clear(); // Redireciona para a página de login Response.Redirect("login.aspx"); Exemplo de menu:
Figura 1 - Menu 4 Cadastro / Exclusão de Contatos Esse módulo será responsável por permitir que o usuário cadastre, altere ou exclua os contatos. Os contatos terão as seguintes informações: - Nome completo do contato; - Cargo; - Empresa; - E-mail; - Endereço; - Telefone; - Data de Nascimento; - Outras informações Antes de iniciar a codificação desse módulo é necessário configurar o DataGrid exibir os dados e os campos com os links de Editar e Excluir, conforme figura:
Figura 2 - DataGrid As configurações desses links deverão ser feitas através do item de menu Property Builder do DataGrid. Para acessar esse menu, clique com o botão direito sobre o DataGrid. Figura 3 - Configuração do DataGrid Com o DataGrid configurado, é possível realizar a codificação necessária. Para cadastrar um novo usuário, no evento onclick do botão cadastrar deverá existir um código que execute o seguinte procedimento:
- Carregar o DataSet (método LoadDataSet o qual deverá invocar o método Fill do DataAdapter); - Criar um novo DataRow, através do método NewRow do DataSet; - Adicionar informações temporárias nos campos obrigatórios, com exceção de campos autoincrement; - Adicionar o DataRow na tabela do DataSet, através do método InsertAt, o qual permite informar a posição onde o novo campo será colocado; - Editar a linhas da grid através da propriedade EditItemIndex; - Renderizar os dados; Exemplo: // Carregando o DataSet // Criando uma nova linha no DataSet DataRow dtr = dtscontatos.tables[0].newrow(); //Atribuindo valor para os campos obrigatórios dtr["id_usuario"] = Session["id"]; dtr["nome"] = "Novo"; dtr["email"] = "Novo"; // Inserindo o novo registro na primeira posição da grid dtscontatos.tables[0].rows.insertat(dtr, 0); //Editando o item dtgcontatos.edititemindex = 0; // Renderizando os dados dtgcontatos.databind(); Vale ressaltar que o código do método LoadDataSet deverá receber tratamento de exceção para evitar que erros sejam exibidos ao usuário. Além de cadastrar, esse módulo deverá possibilitar a alteração dos contatos cadastrados. Para isso, ao clicar no link Editar (evento EditCommand) de uma linha o seguinte procedimento deverá ser executado: // Editando a linha dtgcontatos.edititemindex = e.item.itemindex; dtgcontatos.databind(); A exclusão de um registro deverá ser realizada através do clique no link Excluir (evento DeleteCommand), o qual deverá executar os seguintes comandos: // Excluindo a linha selecionada dtscontatos.tables[0].rows[e.item.itemindex].delete(); // Atualizando o Banco de dados dtacontatos.update(dtscontatos); Importante: Apenas o SelectCommand deverá ser alterado para receber parâmetros. O comando SQL utilizado no SelectCommand:
SELECT email, id_usuario, nome, cargo, empresa, endereco, telefone, data_nasc, informacao FROM tb_contato WHERE (id_usuario = @id) 5 Banco de Dados Deverá ser criado um banco de dados com duas Tabelas: - tb_usuarios - tb_contatos As tabelas de usuário e contados deverão ser criadas de acordo com a Figura 4: Figura 4 - Banco de Dados