在MVC ASP.NET中授权数据

时间:2016-06-29 03:13:45

标签: asp.net-mvc

这真让我烦恼,但无论我读什么,我似乎都无法理解如何解决这个问题。

我知道我们可以为用户分配角色。这些角色允许完成某些活动(控制器中的CRUD操作)。

但是我们如何限制这适用的数据? 这些规则在哪里可以轻松写下来,以便我的控制器不会变得非常混乱?

一个超级基本的例子是:

工厂经理可以更新有关自己工厂的信息,但不能更新其他工厂的信息。 (但他们可以阅读那些数据)

当然,这可以通过多种方式轻松实现,但实际上我有更复杂的系统(FactoryManagers,FactoryWorkers,SupplyManagers,SupplyWorkers),需要一个非常强大的解决方案。以下是一些想法:

  1. 在存储库中,编写单独的查询,首先限制数据。 baseRead baseEdit baseUpdate baseDelete。这些查询返回可以为特定用户执行的操作的列表。然后将它们与用户指定的ID组合,如果它不在子集中,则不返回任何内容。
  2. 在控制器中编写逻辑以解决问题,但这可能会导致对数据库的大量调用。
  3. 提前致谢。

1 个答案:

答案 0 :(得分:1)

使用自定义授权过滤器,这只是这种情况可用的一种方法

以下是SO中另一个答案的摘要代码段。

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    // Custom property
    public string AccessLevel { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {                
            return false;
        }

        //do your custom checks here 
        //based on your custom security scenarios and return true or false

    }
}

用法

[AuthorizeUser(AccessLevel = "Create")]
public ActionResult CreateNewItem()
{
    //...
    return View();
}

有关详细信息,请参阅以下内容

ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)

http://www.codeproject.com/Articles/577776/Filters-and-Attributes-in-ASPNET-MVC