2

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

我找到了这些选项来实现这一点:

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

我还想缓存给定用户的角色和权限。我想我自己需要一些时间来做这件事,所以你有什么建议吗?

先感谢您

4

2 回答 2

4

如果你找到了一个很好的权限模块的打包解决方案,我想看看它:)

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

您描述的权限级别实际上是一个非常高级的实现。它反映了 Windows 中的访问控制列表 (ACL)。虽然看起来很简单,但实际上很难编码。一旦开始设计它,您就会发现您必须实现“拒绝”覆盖权限,必须处理多级组权限合并,然后必须处理“特殊”权限等。然后你会遇到类似“编辑权限是否也意味着视图,如果他们没有视图但有添加”之类的东西?

这可能是一个真正的混乱。

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

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

一旦定义了应用程序真正需要的适当权限级别,通常最好滚动一组自定义对象来管理这些权限。我不得不说,我以前从未考虑过使用第二个链接角色提供者作为权限管理器……这实际上是一个绝妙的主意。但我仍然建议不要这样做。角色提供程序不是为您尝试做的事情而设计的,您可能不得不扩展和覆盖默认行为,以至于从头开始使用自定义实现会更简单,更易于维护。

于 2009-10-07T05:20:02.740 回答
2

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

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

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

在某些条件下,权限可以非常精细(这种形式对于“医生”角色从上午 8 点到上午 11 点可见,因为它与只能在早上给予的药物有关)

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

于 2010-01-25T16:52:45.553 回答