A maior rede de estudos do Brasil

Grátis
244 pág.
Desenvolvimento Web - MVC

Pré-visualização | Página 29 de 41

obter o nome do usuário autenticado, podemos utilizar a propriedade Name da propriedade
Identity:
1 string nome = User.Identity.Name;
Código C# 10.8: Verificando quem é o usuário autenticado
A propriedade Name retorna o nome do usuário que passamos como parâmetro para o método
SetAuthCookie na autenticação.
Exercícios de Fixação
1 Crie um projeto do tipo ASP.NET MVC 4 Web Application chamado Filtros no Visual Studio
2012 Express for Web. Utilize o template Basic Project.
2 Adicione uma entidade chamada Produto na pasta Models do projeto Filtros.
1 namespace Filtros.Models
2 {
3 public class Produto
4 {
5 public int ProdutoID { get; set; }
6 public string Nome { get; set; }
7 public double Preco { get; set; }
8 }
9 }
Código C# 10.9: Produto.cs
164 www.k19.com.br
165 FILTROS
3 Adicione uma classe chamada K19Context na pasta Models para registrar a entidade Produto
e utilizar os recursos do Entity Framework. Lembre-se de fazer com que sua classe herde da classe
DbContext.
1 namespace Filtros.Models
2 {
3 public class K19Context:DbContext
4 {
5 public DbSet <Produto > Produtos { get; set; }
6 }
7 }
Código C# 10.10: K19Context.cs
4 Adicione uma classe Usuario na pasta Models.
1 using System.ComponentModel.DataAnnotations;
2
3 namespace Filtros.Models
4 {
5 public class Usuario
6 {
7 public string Username { get; set; }
8 [DataType(DataType.Password)]
9 public string Password { get; set; }
10 }
11 }
Código C# 10.11: Usuario.cs
5 Adicione o controlador Autenticador para permitir a autenticação do usuário.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.Mvc;
6 using System.Web.Security;
7 using Filtros.Models;
8
9 namespace Filtros.Controllers
10 {
11 public class AutenticadorController : Controller
12 {
13
14 public ActionResult Formulario ()
15 {
16 return View();
17 }
18
19 public ActionResult Entrar(Usuario usuario)
20 {
21 if (usuario.Username != null && usuario.Password != null &&
22 usuario.Username.Equals("K19") && usuario.Password.Equals("K19"))
23 {
24
25 Session["Usuario"] = usuario;
26 return RedirectToAction("Index", "Produto");
27 }
28 else
29 {
30 ViewBag.Mensagem = "usuário ou senha incorretos";
31 return View("Formulario");
www.facebook.com/k19treinamentos 165
FILTROS 166
32 }
33 }
34
35 public ActionResult Sair()
36 {
37 Session.Abandon ();
38 return RedirectToAction("Formulario");
39 }
40 }
41 }
Código C# 10.12: AutenticadorController.cs
1 @model Filtros.Models.Usuario
2
3 @{
4 ViewBag.Title = "Formulario";
5 }
6
7 <h2>Login</h2>
8
9 @using (Html.BeginForm("Entrar", "Autenticador"))
10 {
11 @Html.ValidationSummary(true)
12
13 <fieldset >
14 <legend >Usuario </legend >
15
16 <div class="editor -label">
17 @Html.LabelFor(model => model.Username)
18 </div>
19 <div class="editor -field">
20 @Html.EditorFor(model => model.Username)
21 @Html.ValidationMessageFor(model => model.Username)
22 </div>
23
24 <div class="editor -label">
25 @Html.LabelFor(model => model.Password)
26 </div>
27 <div class="editor -field">
28 @Html.EditorFor(model => model.Password)
29 @Html.ValidationMessageFor(model => model.Password)
30 </div>
31
32 <p>
33 <input type="submit" value="Logar" />
34 </p>
35 </fieldset >
36 }
37
38 <div>
39 @Html.ActionLink("Back to List", "Index")
40 </div>
41
42 @section Scripts {
43 @Scripts.Render("~/ bundles/jqueryval")
44 }
Código CSHTML 10.1: Formulario.cshtml
6 Adicione um controlador para cadastrar um produto e listar os produtos. Altere o controlador
para permitir que apenas os usuários logados possam cadastrar os produtos.
1 namespace Filtros.Controllers
2 {
3 public class ProdutoController : Controller
166 www.k19.com.br
167 FILTROS
4 {
5 private K19Context db = new K19Context ();
6
7 public ActionResult Index()
8 {
9 return View(db.Produtos.ToList ());
10 }
11
12 public ActionResult Cadastrar ()
13 {
14 if (Session["Usuario"] != null)
15 {
16 return View();
17 }
18 else
19 {
20 TempData["Mensagem"] = "Acesso não permitido";
21 return RedirectToAction("Index");
22 }
23
24 }
25
26 [HttpPost]
27 public ActionResult Cadastrar(Produto produto)
28 {
29 if (ModelState.IsValid)
30 {
31 db.Produtos.Add(produto);
32 db.SaveChanges ();
33 return RedirectToAction("Index");
34 }
35 return View(produto);
36 }
37
38
39 }
40 }
Código C# 10.13: ProdutoController.cs
1 @model IEnumerable <Filtros.Models.Produto >
2
3 @{
4 ViewBag.Title = "Index";
5 }
6
7 <h2>Index</h2>
8 @if (TempData["Mensagem"] != null)
9 {
10 <h3>@TempData["Mensagem"]</h3>
11 }
12 <h3></h3>
13 <p>
14 @Html.ActionLink("Cadastrar Produto", "Cadastrar")
15 </p>
16 <table >
17 <tr>
18 <th>
19 @Html.DisplayNameFor(model => model.Nome)
20 </th>
21 <th>
22 @Html.DisplayNameFor(model => model.Preco)
23 </th>
24 <th></th>
25 </tr>
26
27 @foreach (var item in Model)
28 {
29 <tr>
www.facebook.com/k19treinamentos 167
FILTROS 168
30 <td>
31 @Html.DisplayFor(modelItem => item.Nome)
32 </td>
33 <td>
34 @Html.DisplayFor(modelItem => item.Preco)
35 </td>
36
37 </tr>
38 }
39
40 </table >
Código CSHTML 10.2: Index.cshtml
1 @model Filtros.Models.Produto
2
3 @{
4 ViewBag.Title = "Cadastrar";
5 }
6
7 <h2>Cadastrar </h2>
8
9 @using (Html.BeginForm ())
10 {
11 @Html.ValidationSummary(true)
12
13 <fieldset >
14 <legend >Produto </legend >
15
16 <div class="editor -label">
17 @Html.LabelFor(model => model.Nome)
18 </div>
19 <div class="editor -field">
20 @Html.EditorFor(model => model.Nome)
21 @Html.ValidationMessageFor(model => model.Nome)
22 </div>
23
24 <div class="editor -label">
25 @Html.LabelFor(model => model.Preco)
26 </div>
27 <div class="editor -field">
28 @Html.EditorFor(model => model.Preco)
29 @Html.ValidationMessageFor(model => model.Preco)
30 </div>
31
32 <p>
33 <input type="submit" value="Create" />
34 </p>
35 </fieldset >
36 }
37
38 <div>
39 @Html.ActionLink("Back to List", "Index")
40 </div>
41
42 @section Scripts {
43 @Scripts.Render("~/ bundles/jqueryval")
44 }
Código CSHTML 10.3: Cadastrar.cshtml
Para testar, acesse a url http://localhost:<PORTA_APP>/Produto/ e clique no link de cadas-
trar. Depois acesse o endereço http://localhost:<PORTA_APP>/Autenticador/Formulario/ para
fazer a autenticação através do usuário K19 e senha K19.
168 www.k19.com.br
169 FILTROS
7 Ao invés de usar sessão, vamos utilizar o filtro de autorização do ASP.NET MVC. Primeiro, deve-
mos alterar as ações Entrar e Sair do controlador Autenticador.
1 using Filtros.Models;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Web;
6 using System.Web.Mvc;
7 using System.Web.Security;
8
9 namespace Filtros.Controllers
10 {
11 public class AutenticadorController : Controller
12 {
13
14 public ActionResult Formulario ()
15 {
16 return View();
17 }
18
19 public ActionResult Entrar(Usuario usuario)
20 {
21 if (usuario.Username != null && usuario.Password != null &&
22 usuario.Username.Equals("K19") && usuario.Password.Equals("K19"))
23 {
24
25 FormsAuthentication.SetAuthCookie(usuario.Username ,
26 false); return RedirectToAction("Index", "Produto");
27 }
28 else
29 {
30 ViewBag.Mensagem = "usuário ou senha incorretos";
31 return View("Formulario");
32 }
33 }
34
35 public ActionResult Sair()
36 {
37 FormsAuthentication.SignOut ();
38 return RedirectToAction("Formulario");
39 }
40 }
41 }
Código C# 10.14: AutenticadorController.cs
8 Altere o controlador Produto para que somente usuários logados possam acessar o formulário
de cadastro.
1 ...
2 [Authorize]
3 public ActionResult Cadastra ()
4 {
5 return View();
6 }
7 ...
Código C# 10.15: ProdutoController.cs
9 Adicione no arquivo Views/Shared/_Layout.cshtml um link para ação Sair.