2016-03-07 68 views
-1

我有一些關於通過asp.net mvc或一般web應用程序編輯/刪除操作的問題。ASP.NET MVC 4編輯/刪除操作

可以說我有以下URL刪除或修改記錄:應用程序/刪除/ 5,應用程序/編輯/ 5,以編輯或ID 5

當調用的鏈接,確認頁面中刪除記錄通過HTTP GET加載,編輯/刪除操作本身通過HTTP POST完成。

一旦用戶知道鏈接,我怎麼能阻止他調用任何其他應用程序/刪除或應用程序/編輯記錄他不擁有或不允許編輯/刪除?例如:app/delete/7312

我必須在我的控制器操作中放置什麼,用戶只能通過GET獲取允許執行編輯/刪除的記錄的確認頁?

問候 馬克

+5

通過實施身份驗證和授權。 – CodeCaster

+0

查看'[Authorize]'屬性 – Alex

+0

的使用'[Authorize]'僅在您可以將一組允許的用戶角色分配給操作時纔有效。但是OP想要根據數據的擁有者禁止刪除。 –

回答

0

好吧首先我發佈了一個簡單的答案,但我不明白的問題。你將需要兩件事。一種知道誰在系統中創建了什麼的方法,然後是刪除操作中的一些業務邏輯,檢查當前用戶是否與創建它的用戶相同。我會建議我用它來跟蹤對象的所有權此可繼承類:

public class BaseEntity 
    { 
     [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = false)] 
     [Display(Name = "Date Created")] 
     [DataType(DataType.Date)] 
     public DateTime? DateCreated { get; set; } 
     public string UserCreated { get; set; } 
     [Display(Name = "Date Modified")] 
     [DataType(DataType.Date)] 
     public DateTime? DateModified { get; set; } 
     public string UserModified { get; set; } 
    } 

然後在數據庫上下文類,可以覆蓋更改保存到自動跟蹤這些東西,只要在系統中用戶保存的東西來填充那些領域。這很方便,因爲您不必進入創建,編輯等操作並手動將其鏈接起來。

public override int SaveChanges() 
     { 
      var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified)); 
      var currentUsername = HttpContext.Current != null && HttpContext.Current.User != null 
       ? Users.Find(HttpContext.Current.User.Identity.GetUserId()).Name 
       : "Anonymous"; 

      foreach (var entity in entities) 
      { 
       if (entity.State == EntityState.Added) 
       { 
        ((BaseEntity)entity.Entity).DateCreated = DateTime.Now; 
        ((BaseEntity)entity.Entity).UserCreated = currentUsername; 
       } 

       ((BaseEntity)entity.Entity).DateModified = DateTime.Now; 
       ((BaseEntity)entity.Entity).UserModified = currentUsername; 
      } 
      return base.SaveChanges(); 
     } 

於是最後,以真正實現你在你的控制器的刪除操作功能,你只能讓刪除到底,如果Users.Find(HttpContext.Current.User.Identity.GetUserID())。名稱等於到創建模型的人的名字。

我知道這是很多,如果您有問題,請評論我會檢查。