asp.net - 客户可配置的 ASP.NET 网站安全性,用于对页面和按钮访问进行细粒度控制

标签 asp.net sql-server security active-directory roles

我有一个 ASP.NET 2.0 [还没有 ajax] 网站,将以编译的形式部署在多个客户站点上。通常该站点仅是 Intranet。一些客户信任他们的所有人,并且不关心限制对网站和/或页面功能的访问,另一些客户不信任任何人,只希望某些人和/或组能够查看某些页面、单击某些按钮等等。

我可以做一些自行开发的解决方案,可能会从数据库表驱动访问权限,但在我走这条路之前,我想我会问:对于这种情况有什么好的解决方案?最好是可以在 web.config 文件和/或数据库中完全控制的网站,因为重建网站是不可能的(对于客户来说,我不想一遍又一遍地为他们做这件事)。 Active Directory 集成将是一个额外的好处,但不是必需的(除非这更容易)。

作为一个起点,我认为网站中的每个页面/功能点都应该被赋予一个身份并与一个权限组关联......

编辑:通过角色和用户允许/拒绝访问的 web.config 授权部分很好,但这只是问题的一半 - 另一半是控制对每个页面上的各个方法(按钮等)的访问。例如,某些用户可以查看什么内容,而其他用户则可以编辑、创建、删除或禁用/启用它们。所有这些按钮/链接/操作都在 View 页面上...

[理想情况下我会让禁用的按钮不可见,但这在这里并不重要]

编辑:到目前为止有一些好的建议,但还没有完整的解决方案 - 仍然倾向于数据库驱动的解决方案......

  • 安全权限需求属性在点击按钮时会抛出异常,这不是一件友好的事情;我宁愿隐藏不允许用户使用的按钮
  • LoginView 控件也很有趣,但需要多次复制大部分页面内容(每个角色一次),并且可能无法处理用户担任多个角色的情况 - 我不能假设这些角色是分层,因为它们将由客户定义

编辑:平台是Win2K/XP、Sql Server 2005、ASP.NET 2.0,不使用AJAX

最佳答案

我认为您需要在这里做的是在业务对象或 Controller 中实现一组权限查询方法。示例:CanRead()、CanEdit()、CanDelete()

当页面呈现时,它需要查询业务对象并确定用户授权的功能,并根据此信息启用或禁用功能。业务对象又可以使用角色或其他数据库查询来确定事件用户的权限。

我想不出一种方法来以声明方式集中定义这些权限。它们需要被分发到功能的实现中。但是,如果您想改进设计,可以使用依赖项注入(inject)将授权者插入业务对象中,从而保持实现分离。

Rocky Lhotka 的书中有一些使用此模型的代码。新版本不在 Google 中还没有。

关于asp.net - 客户可配置的 ASP.NET 网站安全性,用于对页面和按钮访问进行细粒度控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/176338/

相关文章:

sql-server - 如果列不为空则更新,如果为空则保留为空

sql - 高级 SQL GROUP BY 查询

cryptography - 您采用哪种安全软件开发实践?

java - 确保我的 Java 程序安全

javascript - 在 ASP.NET 中使用 javaScript 时,模式弹出窗口不会隐藏

c# - 什么是 paypal api 的 txn_id,为什么要检查它以及如何检查?

asp.net - 如何下载以二进制格式存储在 SQL DB 中的文件

asp.net - 您可以使用 Mono Develop 直观地编辑 asp.net 项目的 html/view 部分吗?

sql-server - 如何以编程方式创建 ODBC 链接表到 SQL Server View 并使其可编辑?

c# - AVG 显示为威胁的应用程序