已登录用户的MVC访问限制

时间:2014-08-05 11:54:19

标签: c# asp.net-mvc asp.net-mvc-4

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

[Authorize(Roles="Admin")]
public ActionResult EditProduct(int productID)
{
    //Edit product here
}

每个客户都有他们产品的列表,他们可以点击编辑按钮将他们带到编辑页面。我的问题是:如何阻止Client_1输入

  

http://mypage/EditProduct/3 //此产品只能由Client_2编辑

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

[Authorize(Roles="Admin")]
public ActionResult EditProduct(int productID)
{
    //if(logedinUser can edit this product)
    //{
    //   Edit product here
    //}
}

开始时没关系,但现在这些限制功能的数量已经很多了。我越来越想,不想一遍又一遍地重复检查。

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

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

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

var result = from p in context.Products
where p.ProductId == productId && p.UserID == userid
select p;

如果产品不属于用户,则查询不会返回任何元素。或者更好的是,您可以在不考虑用户标识的情况下获取产品,然后检查返回的产品是否指定了userId。如果它有不同的userId可能会抛出一个自定义异常并捕获它并显示错误消息。

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