代码之家  ›  专栏  ›  技术社区  ›  Delebrin

需要帮助来保护ASP.NET Web应用程序

  •  3
  • Delebrin  · 技术社区  · 16 年前

    我正在开发一个内部Web应用程序(只有员工可以登录),需要一些帮助来确定处理单个用户对系统权限的好方法。

    系统本身位于C/ASP.NET(4.0/webforms/forms authentication)/SQL Server 2008中,并且具有多个不同的区域,这些区域具有不同的权限集。您可以在一个基本的CRUD场景(创建、查看、更新、删除)中考虑它,尽管这些场景将应用于系统的不同方面。

    (我想说的是,这不是一种CMS系统,所以我不能选择像DotnetNuke之类的开源项目。这是从零开始发展起来的。如果开放源码库可用,我可以使用它们。)

    对于复杂系统来说,设计用户权限系统的一个好方法是什么?可能有5-6个不同的部分,每个部分包含10-15个不同的视图/更新/删除?

    我们的目标是:

    1. 用户(管理员)可以理解使用/设置。
    2. 易于维护代码。
    3. 由于需要新的权限(不同的类型或在不同的位置),很容易适应。

    我们想到了两种方法:

    方法1:

    尝试使用内置的ASP.NET角色系统定义不同的权限并从中进行管理。我可以构建自定义页面来处理不同的区域,并为用户分配权限集。我相信这也允许我在默认情况下使用当前会话对象来包含系统中用户的所有权限。(httpContext.user.isinRole()等…)。

    现在,虽然我认为这种方法可行,但我不确定它是否易于维护或适应未来的需求。这似乎是一个更快的方法,让它离开地面和工作,但不是最好的长期。

    方法2:

    滚我自己的。在这个场景中,我设置了数据库表来存储应用程序每个部分的真/假样式权限。然后我会检索这些信息并将其放到会话中,基本上在需要检查某人是否有权限执行某项操作时随时访问它。然后我会构建自定义页面来管理列表等。

    看来,这种方法可能是更易于维护的长期解决方案。它给了我更多的权力在设置和如何处理。但是,我基本上仍然在做方法1中角色系统为我抽象的工作。但是,我仍然赞成这种方法而不是方法1。


    最后,我不确定这两种方法是否是处理这一问题的最佳方法。有人能帮我解释一下为什么上面的任何一个都是好的/坏的吗?或者甚至建议一个不同的替代方案来处理一般情况下的“最佳”方法。这是我在这一领域的第一项主要工作,因此我在尝试通过权限“保护”这样的应用程序方面没有太多经验。感谢您的任何帮助!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Paddy    16 年前

    使用内置方法,除非您有一个特定的体系结构不需要这样做。如果您不使用内置的,您可以选择滚动您自己的提供者实现,但是您应该遵循与内置系统相同的模板,因为它涵盖了您应该考虑的许多安全警告。

    甚至还有内置的配置页面,用于快速和肮脏的用户维护。

        2
  •  0
  •   BrokenGlass    16 年前

    我会坚持使用内置的方法,你可以随时编写一个自定义 RoleProvider 要匹配用户群所需的角色和权限,请参见( Implementing a RoleProvider )