关于授权用户使用功能点的指南

时间:2013-08-01 15:55:42

标签: security asp.net-mvc-4 web-applications architecture authorization

我正在使用ASP.Net MVC 4开发一个应用程序,并且需要能够在细粒度级别对用户进行授权 - 可能是页面上的数据元素,用户可以为一段数据采取的特定操作,等等。 / p>

我目前正在为角色分配一个人,并为该角色分配了一项活动的权限(查看,添加,编辑和删除)。角色和权限值(我使用权限的按位值)被分配给一个活动。我目前正在ASP.Net MVC应用程序中将一个活动定义为一个动作。因此,为了导航到MVC操作,用户必须至少具有该操作的“查看”权限,否则他们无法访问该操作。用户在该操作中可以执行的操作取决于其他权限(添加,编辑,删除)。

这是一种很好的方法。所有权限都存储在我的数据库中,因此我几乎将权限与UI本身分离。我所做的就是检查用户是否在显示加载数据输入表单的按钮之前说出了添加权限。

我很确定这种方法不够精细。例如,如果我需要在这样的角色中隐藏用户X的数据列,那么我不确定如何使用我的方法来满足该要求。现在,查看权限是全部或全部。

我非常不愿意在我的视图代码中注入一堆if语句来控制向用户显示的内容。这将UI与我的安全机制紧密结合。更不用说你根本无法维持这一点。

所以,我很难过如何使安全机制更精细,同时保持良好的清洁分离。当我想到这一点时,我正在直接从我当前的方法中跳出来在我的代码中注入一堆if语句。我没有看到任何替代品。非常感谢和需要任何建议,示例链接等最佳实践。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

请不要让这种方法更精细。所有现有的访问控制范例都基于以下假设:资源是可靠的并且不能被分割(文件就是这方面的好例子)。否则它会非常复杂和可怕。

问题是您将不同性质的权限混合到同一个框架中。第一种类型是“谁可以访问资源?”,第二种类型是“谁应该看到这部分资源?”。

我的建议是额外增加data filtering layer

它可以使用现有的相同角色 - 权限分配结构,甚至可以扩展它。从功能上讲,这个新层和主要访问控制应该相互独立。如果关闭其中一个,其余系统应继续正常工作。

应根据情况仔细规划这种“基于角色的数据过滤”子系统。在asp.net中,mvc过滤可以在两个级别进行:

  1. 数据访问。从DB读取数据时,根据访问权限隐藏其中的一部分。

  2. 演示。最简单的方法是,不同的视图呈现不同级别的数据访问。复杂的方式是使用自定义的HtmlHelper扩展 - 在渲染时调用该新的子系统来检查访问。


  3. 小更新:

    由于访问控制系统的主要关注点是“对象”,您可能会想到您所理解的“对象”。例如,可以考虑对象字段(列)。这种转变将是一个根本性的变化,当然会带来复杂性,但它可以实现您的大部分要求。

    这与SQL类似,其中用户应指定所需的列,并且系统在请求执行之前检查列访问权限,因此您可能想要研究它是如何在那里完成的。

答案 1 :(得分:0)

我发现我所寻找的是基于声明的安全性。 .Net 4.5现在已经出炉了。以下是一系列精彩的文章,引导您完成整个过程:

Introduction to Claims based security