Fonctionne correctement mais lorsque l'utilisateur change le nom du champ 'ProductDTO.Property1' en 'ProductDTO.Property2' - via firebug, le paramètre Property2 de DTO en tant que demande client. En attendant, je ne m'interroge pas sur les DTO, mais quand je mappe une entité à la page pour l'éditer, le client peut changer les enregistrements de db.Entity-Record Security
Je souhaite protéger certaines propriétés avec rôle. Les utilisateurs ne peuvent pas changer mais les administrateurs peuvent
par exemple. Avoir une solution comme celle-ci;
[Secure(Role="Admin")]
public string Property2 { get; set; }
DTO:
public class ProductDTO
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
En ASPX:
<%@ Control Language="C#" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewUserControl<CmTest.Web.Controllers.ProductController.ProductFormViewModel>" %>
<% using (Html.BeginForm()) { %>
<%= Html.AntiForgeryToken() %>
<label for="Product_Property1">Property1:</label>
<div>
<%= Html.TextBox("ProductDTO.Property1", (ViewData.Model.ProductDTO != null) ? ViewData.Model.ProductDTO.Property1 : "")%>
</div>
<% } %>
Controller:
[Transaction]
public ActionResult Edit(int id)
{
ProductFormViewModel viewModel = ProductFormViewModel.CreateProductFormViewModel();
viewModel.ProductDTO = productRepository.GetDTO(id);
return View(viewModel);
}
[ValidateAntiForgeryToken]
[Transaction]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(ProductDTO productDTO)
{
//debugging
}
public class ProductFormViewModel
{
private ProductFormViewModel() { }
public static ProductFormViewModel CreateProductFormViewModel()
{
ProductFormViewModel viewModel = new ProductFormViewModel();
return viewModel;
}
public ProductDTO ProductDTO { get; internal set; }
}
Merci pour les commentaires, son apparence ressemble à droite, mais le compilateur ne jette pas d'erreur lorsque je change le nom de la propriété. Merci encore. – cem
Non, le compilateur ne lancera pas d'erreur, il exclura la propriété de la liaison au moment de l'exécution, même si quelqu'un modifie la requête HTTP et essaie de définir la valeur, la propriété aura toujours sa valeur par défaut. –
Merci, je suppose que seule cette solution corrige le trou de sécurité. – cem