2016-06-15 8 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

リンクがあなたの*ビュー*に存在する場合、ログインしていなければ削除するオプションが許可されているという印象を与えます。あなたが投稿したものから、削除されましたが、何が起こったのかの説明なしでインデックスページに戻します。私はあなたが(フィルタを構築せずに)削除コントローラに入るのを防ぐことはできないと思うが、ログインしていなければアクションのコード内容を実行するのを防ぐことができるが、 '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

@コードキング、私は例外を引き起こしている可能性があるあなたの元の投稿にコメントしました。 – nocturns2

+0

私はそれを仕事にしました、なぜ私はそのエラーを持っていますか?私は知らない、私はそれをすべて削除し、それをもう一度書いて、それは働いたより! [Authorize]を置いて、動作させてください!どうもありがとう!素敵な一日を過ごす! –

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

それはそれです - 彼はすでに彼らが認証されているかどうかをチェックしています。 '[Authorize]'属性と彼がOPでチェックしているプロパティが、私が考えると思う、別のものを返さない限り、起こるべきではありません。 –

+0

フロリアンのようなユーザーには、私が探しているものではないからです。 CannはURLを書くだけです:) –

関連する問題