2016-06-15 76 views
0

我目前正在使用CRUD身份。但我可以破解這個。我正在努力,使它只能在登錄後才能刪除。防止用戶在未登錄的情況下不刪除

我已經嘗試加入if (User.Identity.IsAuthenticated)但是,這不起作用,它會將我發送到登錄頁面後,您已進入刪除頁面。這是我的控制器:

public ActionResult _RemoveItems() 
    { 
     var Items = db.CreatePosts.ToList(); 

     return PartialView(Items); 
    } 

    [HttpPost] 
    public ActionResult _RemoveItem(int Id) 
    { 
     if (HttpContext.User.Identity.IsAuthenticated) 
     { 
      CreatePost CreatePost = db.CreatePosts.Find(Id); 
      if (CreatePost != null) 
      { 
       db.CreatePosts.Remove(CreatePost); 
       db.SaveChanges(); 
      } 
     } 
     return RedirectToAction("Index", "Manage"); 
    } 

這是我刪除

@Html.ActionLink("Slet", "_RemoveItem", "Home", new { @id = item.Id }, new { @class = "btn btn-danger" }) 

我在做什麼錯了,因爲我不能讓它所以你需要先登錄即可進入頁面之前_RemoveItem

+0

如果鏈接存在於* view *中,那麼它會給人一個印象,即如果沒有登錄,允許刪除選項。從你發佈的內容看,它看起來並不像他們有能力刪除,但它會將它們重定向回索引頁面,而不會解釋發生了什麼。我不認爲你可以阻止用戶進入刪除控制器(沒有構建過濾器),但是你可以阻止他們執行操作的代碼內容,如果他們沒有登錄,但是Identity.IsUserAuthenticated應該做的伎倆。 –

+0

問題是,它不是爲什麼?我不知道。我已經精確地把它放錯了,但它應該放在哪裏,我不知道。 –

+0

正如一邊,您的[HttpGet]方法名稱是_RemoveItem而您的[HttpPost]方法名稱是_RemoveItems。 – nocturns2

回答

2

可以使用[Authorize]屬性,在方法上面的一行:

[Authorize] 
public ActionResult _RemoveItems() 

這將要求訪問該方法的任何人都必須登錄。

您還可以在Authorize屬性中添加更多參數來管理允許的角色等等。

如:

[Authorize(Roles="SpecialRole, OtherRole")] 

在這種情況下,該方法只允許在「SpecialRole」的作用和/或「OTHERROLE」角色的用戶,或者在這兩個角色有機會獲得。

+0

嘗試了[AUTHORIZE]並且「有點」工作。現在的問題是,它現在說,當我試圖刪除。 http://i.imgur.com/xTsz9KI。png –

+0

@Code King,我在你原來的帖子中評論過可能導致異常的原因。 – nocturns2

+0

好吧,我做了它的工作,爲什麼我得到了那個錯誤?我不知道,我把它全部刪除了,再次寫下來,而且效果不錯!放置[授權],使其工作!非常感謝!祝你愉快! –

0

如果你試圖讓你的視野中消失了刪除按鈕,你將不得不做一些額外的工作來實現這一目標:

在顯示您的視圖控制器中的操作,你不知何故需要通過,如果用戶是否登錄(您可以可以做到這一點在你的看法,但你不應該)。您可以使用ViewBag輕鬆完成此任務,或者修改您的模型以包含屬性,無論哪種方式最適合您。

[HttpGet] public void Index() { 
    ViewBag.IsLoggedIn = HttpContext.User.Identity.IsAuthenticated; 
} 

在您看來,

@(ViewBag.IsLoggedIn == false ? "" : Html.ActionLink("Slet", "_RemoveItem", "Home", new { @id = item.Id }, new { @class = "btn btn-danger" })) 

好像你已經確保他們登錄和我做,因爲這個答案是你似乎什麼樣子,你就想基於[我的潛在誤解]你的評論。

+0

但是,然後用戶仍然可以鍵入URL來刪除,所以它不是很安全。使用[AUTHORIZE],如果用戶未通過身份驗證,您可以阻止訪問資源/控制器操作。 –

+0

但就是這樣 - 他已經在檢查是否已通過身份驗證。除非在OP中檢查的'[Authorize]'屬性和屬性返回不同的東西,我認爲這不應該發生。 –

+0

不是我正在尋找的,因爲弗洛裏安告訴用戶。 Cann只需寫入網址:) –

相關問題