我正在研究ASP.NET MVC3应用程序的安全框架,该应用程序将拥有一些相当复杂的授权规则,可以查看数据,谁可以创建和编辑数据。规则如 - 我只能看到属于我公司或分支机构的客户。 - 如果我从创建记录的那天起15天或更短的时间,并且我的角色是超级用户,那么只有我可以编辑该记录上除了两个字段之外的所有字段。 16天或更长时间后,我只能编辑两个字段。
我最初的想法是使用企业安全块并只添加自定义授权程序,但在阅读了有关ASP.NET中基于成员身份的安全性的本机支持的更多信息后,我不确定是否需要Enterprise Security Block。我没有在实际应用程序中使用这两个框架,因此在该主题上寻找一些集体智慧。
答案 0 :(得分:1)
这是复杂字段级安全性的问题。没有真正的框架来帮助你,因为一切都是如此自定义。您可以做的最好的事情是将其解压缩到某种查找表中,并在表中为每个字段分配一个自定义标识符,然后有一组指示每个安全级别的列。然后,构建业务逻辑,以便传入字段和条件,并简单地回复是否允许它。
你必须弄清楚界面中“允许”的含义。禁用它?把它藏起来?忽略它?
我不羡慕你。
你可能会觉得这很有趣。
http://bartreyserhove.blogspot.com/2008/12/field-level-security-using-aspnet-mvc.html
答案 1 :(得分:1)
您可以使用Azman - Microsoft授权管理器及其相关API。
它为您提供角色,操作,权限和更多可配置选项。
Azman使用AD来存储大部分内容。它还提供了使用本地XML和/或配置文件进行存储的选项。
答案 2 :(得分:0)
您在这里不仅涉及直接的安全问题,而且实际上是授权规则和编辑规则。您的身份验证规则听起来非常自定义,我觉得您可能需要在自己的自定义代码中处理这些规则,然后在您自己的视图模型中包含这些属性。
我不知道任何框架会默认为您提供此功能,因为这些是非常自定义的编辑规则。您可以调用这些声明,并在登录时违反基于声明的框架(如Windows身份基础(WIF))但您仍需要自定义IF stmts以允许根据您在ViewModel中设置的属性(例如CustomerViewModel.AllowAddressEdit)在视图中进行编辑。您的视图需要检查此属性以显示DisplayFor或EditorFor。但是,您还应该在回发时检查这些值,以确保用户不仅仅注入了值来破解您的应用。
答案 3 :(得分:0)
您可以使用asp.net安全性对网站进行基本身份验证,您可以将其用于基本角色成员身份。但由于这些是站点范围的权限,因此您需要自己的逻辑来将用户划分为组织权限。
我过去所做的是使用asp.net成员逻辑来处理基本的auth东西,但是在数据库中保留另一个结构,将用户id映射到其他参数 - 比如提到的组织级别成员资格,或者尤其是数据驱动结构的访问权限。
我真的很惊讶,因为没有更好的解决方案来处理许多应用程序需要的更多的文本成员/权限情况。