扩展ASP.NET角色提供程序

时间:2010-03-28 22:51:17

标签: asp.net roles roleprovider

因为RoleProvider接口似乎只将角色视为简单的字符串,所以我想知道是否有任何非hacky方法为每个用户应用角色的可选值。

我们当前的登录管理系统将角色实现为键值对,其中值部分是可选的,通常用于阐明或限制角色授予的权限。

例如,角色'编辑'可能包含用户'barry',但对于'barry',它将具有可选值'raptors',系统将其解释为意味着Barry只能编辑在'猛禽'类别。

我在其他地方看到过一个简单创建额外分隔角色的建议,比如'editor.raptors'或者其他一些角色。这并不是理想的,因为它会大大增加角色的数量,而且我可以说它取代我们当前的实现(这也是非常不理想,但具有定制的优势)将是一个非常难的销售。使用我们的用户数据库)。

我已经知道上面提到的连接方法将涉及很多繁琐的字符串拆分和部分匹配。

有更好的方法吗?

编辑:我最初的目标是使用更多内置的ASP.NET功能。例如,通过Web.config中的<authorization/>元素控制访问。据我所知,这样做需要自己实现角色。我们当前系统的auths概念似乎与那个限制非常相似。

回答mnemosyn的问题

  1. 是。我们有一个用于用户,应用程序及其授权的中央数据库。这是一个核心系统,并没有解决它。
  2. 目前我们的系统不是分层的,实际上需要花费很多精力来维护。当创建应用程序时,定义一组授权(例如,'admin','user','poweruser','gatekeeper','keymaster'等)。然后,用户可以使用可选值与这些授权相关联,以获得用户和(特定于应用)授权的唯一组合。
  3. 您能详细说明您所说的这些“类别”吗?

1 个答案:

答案 0 :(得分:1)

这听起来像是一个建筑问题。

首先,您需要确切地确定您需要的内容。在第二步中,将其映射到具体实现。要在那个方面取得进展:除了最简单的情况之外,我不会使用内置提供程序。此外,这个问题很快变得非常复杂,所以我尽量保持这个问题。

要详细说明您的需求,请尝试确定:

  • 您是否真的需要将角色概念映射到数据库,就像在CMS中一样?或者对角色系统进行更改意味着对系统进行修改。在这种情况下,您可以使用更简单的解决方案并将枚举添加到用户中。这将节省大量的数据库访问,使连接简单选择等。
  • 您想通过您解释的多角色概念实现什么目标?它真的是你需要的角色吗?个人权限怎么样?例如,您是否具有层次结构,以便每个节点都可以拥有与之关联的特定权限集,就像Windows的文件安全性概念一样?
  • 如果它只是类别,为什么不将类别映射到用户,即为每个用户在每个类别中赋予特定角色。这将需要对默认类别等进行一些调整。

有一些提示:不要去白名单,总是使用黑名单。控制白名单是一种痛苦,尤其是当许多规则汇集在一起​​时。例如,在drupal中,我认为这是一个主要的缺陷(这就是为什么他们重​​建它以使用版本7中的黑名单)。允许用户做他们不应该做的事情通常是一个比其他方式更大的问题。

Windows文件访问概念非常复杂,因为它既有黑名单又有白名单,还可以继承 - 所以尽量让你的解决方案比这更简单。

串联连接对我来说听起来很危险,无论如何我都会寻求更清洁的解决方案。这种类型的元逻辑令人头疼。