C# 登录用户的MVC访问限制

C# 登录用户的MVC访问限制,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我很抱歉,如果已经有人问和回答,但我找不到任何可以帮助我的。想象一个场景,您有两个客户机。两者都是登录的、经过身份验证的,并且都是管理员(对于他们自己的帐户)。他们每个人都可以编辑他们的产品。客户端_1可以编辑产品1、2和5,客户端_2可以编辑产品3、4和6。因此,在我的控制器中,我有一个动作: [Authorize(Roles="Admin")] public ActionResult EditProduct(int productID) { //Edit product here }

我很抱歉,如果已经有人问和回答,但我找不到任何可以帮助我的。想象一个场景,您有两个客户机。两者都是登录的、经过身份验证的,并且都是管理员(对于他们自己的帐户)。他们每个人都可以编辑他们的产品。客户端_1可以编辑产品1、2和5,客户端_2可以编辑产品3、4和6。因此,在我的控制器中,我有一个动作:

[Authorize(Roles="Admin")]
public ActionResult EditProduct(int productID)
{
    //Edit product here
}
每个客户都有自己的产品列表,他们可以点击编辑按钮进入编辑页面。我的问题是:如何阻止Client_1输入

http://mypage/EditProduct/3
//此管道只能由客户端\u 2编辑

目前,每个功能都会检查用户是否可以编辑此产品。我必须在每个函数中编写一个自定义逻辑来停止它吗

[Authorize(Roles="Admin")]
public ActionResult EditProduct(int productID)
{
    //if(logedinUser can edit this product)
    //{
    //   Edit product here
    //}
}
一开始这很好,但现在这些“受限函数”的数量增加了,我不想再重复同样的检查了


有没有更好的方法来实现这一点?

您可以使用自定义授权筛选器来整合这种逻辑


您可以使用自定义授权筛选器整合这种逻辑


我认为您真的不必对此进行验证。因为当您使用productId从数据库获取产品时,您可以检查userid是否处于where条件

var result = from p in context.Products
where p.ProductId == productId && p.UserID == userid
select p;
如果产品不属于用户,查询将不会返回任何元素。或者更好的是,您可以在不考虑userid的情况下获取产品,然后检查返回的产品是否指定了userid。如果它有不同的用户ID,可能会抛出一个自定义异常并捕获它并显示一条错误消息


如果将逻辑合并到数据层中,您不必每次都检查无效访问。

我认为您真的不必为此执行验证。因为当您使用productId从数据库获取产品时,您可以检查userid是否处于where条件

var result = from p in context.Products
where p.ProductId == productId && p.UserID == userid
select p;
如果产品不属于用户,查询将不会返回任何元素。或者更好的是,您可以在不考虑userid的情况下获取产品,然后检查返回的产品是否指定了userid。如果它有不同的用户ID,可能会抛出一个自定义异常并捕获它并显示一条错误消息

如果将逻辑合并到数据层中,则不必每次都检查无效访问