2010-03-28 126 views
0

因为RoleProvider接口似乎只将角色视为简单字符串,所以我想知道是否有任何非用户可以在每个用户的基础上为角色应用可选值的方法。扩展ASP.NET角色提供者

我们当前的登录管理系统将角色实现为键值对,其中值部分是可选的,通常用于阐明或限制角色授予的权限。例如,“编辑者”角色可能包含用户'barry',但对于'barry',它将有一个可选值'raptors',系统会解释这意味着Barry只能编辑下面提交的文章'猛禽'类。

我在其他地方看到了一个建议来简单地创建额外的分隔角色,比如'editor.raptors'或somesuch。这并不是真的很理想,因为它会大大增加角色的数量,我可以说这将是一个非常难以推销的替代我们目前的实现(这也是非常不理想,但具有定制的优势与我们的用户数据库一起工作)。

我可以告诉你,上面提到的连接方法会涉及很多繁琐的字符串分割和部分匹配。

有没有更好的方法?

编辑:我最初的目标是在内置ASP.NET功能使用较多。例如,通过Web.config中的<authorization/>元素控制访问。据我所知,这样做需要自己实施角色。除了这一限制之外,我们目前的系统认证概念似乎很适合。

回答mnemosyn的问题

  1. 是。我们有一个用于用户,应用程序及其授权的中央数据库。这是一个核心系统,并没有围绕它。
  2. 目前我们的系统不是分层的,实际上需要花费很多精力来维护。创建应用程序时,会定义一组授权(例如'admin','user','poweruser','看门人','keymaster'等)。然后,将用户与具有可选值的授权关联起来,以实现用户和(特定于应用程序)授权的独特组合。
  3. 你能详细说明你说的这些'类别'吗?

回答

1

这听起来像是一个架构问题。

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

要阐述你的需求,尝试确定:

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

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

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

字符串连接thingie对我来说听起来相当危险,我会在任何情况下寻求更干净的解决方案。这种类型的元逻辑令人头痛。

+0

我已更新我的问题以解决您提出的一些问题。 – 2010-03-29 03:07:33