在ASP.NET中,用什么来管理分配给角色的角色和权限?

时间:2009-10-05 09:04:29

标签: c# asp.net authorization permissions role

我正在开发一个ASP.NET Web应用程序。我有这个众所周知的问题:每个用户可以属于一个或多个角色(管理员,公共用户),每个角色可以有一个或多个权限(可以编辑,可以删除,可以上传等),反之亦然。我想做这样的事情:[http://demo.sitefinity.com/Sitefinity/Admin/Modules.aspx?route=GenericControlPanel.PermissionsView`1]。

我找到了实现这个的选项:

  • 使用NetSqlAzMan(但我不确定它是否适用于我们的应用程序,因为我们的用户不存储在与应用程序相同的数据库中,并且我们正在使用表单身份验证)
  • 实现我自己的类,使我能够做到:User.HasPermission / AddPermissionToUser / etc.
  • 使用2个角色提供者:一个用于管理角色,一个用于管理权限,知道这些提供者将“链接”,因为角色和权限之间存在m:n关系。
  • 我现在正在使用自定义角色提供程序,因此另一个选项是添加管理此提供程序权限的方法。

我还希望缓存给定用户的角色和权限。我想我需要一些时间才能完成这项工作,所以你建议我做什么?

提前谢谢

2 个答案:

答案 0 :(得分:4)

如果您找到了一个适用于权限模块的良好打包解决方案,我希望看到它:)

一般来说,内置安全提供程序在“标识”和“授权”部分之后停止。一旦确定并授权访问该应用程序,您就可以自行编码和管理更具体的页面或功能级别权限。

您描述的权限级别实际上是非常先进的权限。它镜像Windows中的访问控制列表(ACL)。虽然看起来相当直接,但实际上很难编码。一旦你开始设计它,你会发现你必须实现“拒绝”覆盖权限,必须处理多级组权限合并,然后必须处理“特殊”权限等。然后你会遇到像“编辑权限暗示视图一样,以及如果他们没有视图但又有添加”我会怎么做?

这可能是一团糟。

在你以这种复杂程度实现权限之前,我强烈建议你退后一步,看看你是否可以平衡你的权限和角色/组模型。你能不能让你的角色成为权限吗?例如,可以编辑的人员角色,可以添加的人员角色,可以查看的人员角色等。

在大多数应用程序中,您并不需要权限系统中的粒度等完整ACL。

一旦定义了应用程序真正需要的适当权限级别,通常最好滚动一组自定义对象来管理这些权限。我不得不说我以前从未考虑过使用第二个链接角色提供程序作为权限管理器......实际上这是一个很棒的想法。但我仍然反对它。角色提供程序不是为您要执行的操作而设计的,您可能必须扩展和覆盖默认行为,以便从头开始使用自定义实现更简单,更易于维护。

答案 1 :(得分:2)

这是一个结合了身份验证+权限和角色+日志记录和审核的工具 http://visual-guard.com/

身份验证可以是Windows,在这种情况下,它实现单点登录 或用户名/密码组合

可以使用2个控制台来管理用户和权限 - 一个更面向开发人员,并提供一个向导来定义权限,而无需编码(.Net),部署和版本控制功能。 - 另一个是面向基于Web的非技术用户管理员,侧重于用户帐户,组并将其映射到角色。

在某些条件下,权限可以非常精细(“医生”从早上8点到上午11点可以看到这种形式,因为它与仅在早上必须提供的药物有关)

它最初只是面向.Net,现在它们支持其他技术,如Java,Delphi C ++,基本上任何能够调用Web服务的技术。