如果未登录,则阻止用户不删除

时间:2016-06-15 20:14:36

标签: c# asp.net-mvc asp.net-identity crud

我目前正在与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

2 个答案:

答案 0 :(得分:2)

您可以在方法上方的一行中使用[Authorize]属性:

[Authorize]
public ActionResult _RemoveItems()

这将要求访问该方法的任何人登录,期间。

您还可以向Authorize属性添加更多参数,以管理允许的角色等等。

如:

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

在这种情况下,该方法仅允许“特殊角色”中的用户使用。角色和/或其他角色'角色,或两个角色都有权访问。

答案 1 :(得分: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" }))

似乎您已经确定他们已登录并且我做出了这个答案,因为根据[我对您的评论的潜在误解],这就是您想要的样子。