【问题标题】:Module Based Security基于模块的安全性
【发布时间】:2010-01-22 05:19:50
【问题描述】:

我正在尝试创建一个基于模块级安全性的应用程序。这个想法是我们将有一个用户登录,获取角色,获取这些角色有权访问的页面,然后在这些页面中获取他们有权访问的模块,然后获取他们有权访问的模块内的功能(列表、创建、编辑、删除)。这样,在管理屏幕中,有人可以允许或拒绝模块和模块功能到组。

有没有人看过这样的示例项目,或者对如何实施有任何线索?我真的很想在 n 层架构上尝试一下。

【问题讨论】:

    标签: asp.net security asp.net-membership


    【解决方案1】:

    使用基本的会员系统创建您的网站。将您的页面分组到文件夹中,并在每个文件夹中包含 Web.Config 文件以控制访问。在大多数情况下,这都是开箱即用的功能。您必须编写的唯一自定义代码是在创建管理表单时。

    至于细粒度访问,如果他们不能访问页面,他们就不能访问他们的方法......

    http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

    更新:

    如果 User.IsInRole("管理员")...

    http://www.4guysfromrolla.com/articles/082703-1.2.aspx

    在同一页面的代码隐藏中,您可以通过编程方式检查它们的角色并相应地显示/启用面板/模块:-)

    【讨论】:

    • 感谢您的信息。我明白这一点,但我想知道是否有可能有一个应用程序,其中 2 个角色可以访问一个页面,但在该页面中,不同的模块是基于角色加载的,以及基于滚动的模块中的不同功能。那有意义吗?根据用户的滚动,一个页面将具有不同的模块和模块功能...
    • @Jesse:是的,请参阅更新。您可以根据用户是否在此角色中以编程方式检查角色并加载模块。根据您的对象设计,您可能会找到一种更优雅的方式来做同样的事情:-)
    • 感谢您的回答和更新(为延迟道歉):)
    【解决方案2】:

    我会为您的页面使用一个基类来实现您描述的效果。在您的基类中,您可以添加您需要的所有可用方法,但在基类中提供一个授权方法,该方法允许方法根据它们被允许拥有的角色来标识自己。如果您计划好,所有这些都可以使用 web.config 进行配置。很多时候,基于“文件夹”的 SQL 成员资格方法不够健壮。

    我想举个例子,您可以构建自己的(或在 System.Security 命名空间中找到一个)安全枚举来定义访问级别,然后将访问级别从 AD(或任何地方)中的组映射到枚举。然后,这些方法可以针对您的用户对象使用安全枚举来确定用户的访问权限是否允许该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2011-08-19
      • 2013-03-21
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多