好吧首先我發佈了一個簡單的答案,但我不明白的問題。你將需要兩件事。一種知道誰在系統中創建了什麼的方法,然後是刪除操作中的一些業務邏輯,檢查當前用戶是否與創建它的用戶相同。我會建議我用它來跟蹤對象的所有權此可繼承類:
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())。名稱等於到創建模型的人的名字。
我知道這是很多,如果您有問題,請評論我會檢查。
通過實施身份驗證和授權。 – CodeCaster
查看'[Authorize]'屬性 – Alex
的使用'[Authorize]'僅在您可以將一組允許的用戶角色分配給操作時纔有效。但是OP想要根據數據的擁有者禁止刪除。 –