【问题标题】:Access Control List (ACL) abstraction layer in .net.net 中的访问控制列表 (ACL) 抽象层
【发布时间】:2011-10-15 10:04:02
【问题描述】:

.net 中是否有可用的 ACL 抽象层?我看过一些“最佳实践”文档,但没有很好的基础实现。 System.Security.AccessControl 呢?这是一个好的起点吗?

ACL 应该与存储在数据库中的角色以及系统中的角色以及内存中对象定义以及数据库对象或文件一起使用。所以它应该是通用的和/或易于扩展的。

这应该依赖 .net 框架中的 IPrincipal、IIdentity 吗?

Zend 在他们的 PHP 框架中有类似的东西,我正在为 C# 搜索这种东西,而不是移植它(如果已经有标准解决方案或最佳实践实现)。

@ladislav:

它并非仅用于 Web 服务、胖客户端或独立应用程序。因此,我正在搜索一个抽象层,该抽象层可以由适配器扩展以用于特定的后端/平台。你是对的,我正在搜索类似于基于角色的访问管理抽象层的东西,以获取不同类型的对象和正确的定义。这不应依赖于您为文件系统中的文件夹设置的 ACL。文件系统应该是 ACL 实现使用的特殊适配器。对我来说,ACL 本身是一个概念,与文件系统无关。文件系统使用 ACL 概念的实现(即使它在该领域最为人所知)。不需要对 Win32-api 的硬依赖。这就是为什么我要求一些普遍(和广泛)使用的通用和抽象(接口)。你知道 zend 框架中的实现吗(我知道它是 PHP,但这个概念适用于任何应用程序,不仅仅是基于 Web 的)?它是抽象的,可以用于代码中的任何对象

【问题讨论】:

  • System.Security.AccessControl 有什么问题?
  • 我看过 AccessRule 但没有找到有用的示例代码。我认为,msdn 缺少该领域的一些示例。 nacl.codeplex.com好像是个解决办法,不知道是不是常用的。
  • ...也许一个使用领域正在独立于数据权限获得对 ui 特定部分的访问权限。一个简单的基于字符串的 user/role/objectToAccess 将是一个起点。随着用户需求/要求的增长(例如,使用 db-backed store 或 windows 用户),这可以在以后的里程碑中扩展。我不想硬依赖文件/文件夹或 Active Directory。 (我知道,我可以使用单独的文件夹来象征对象并在 fs 上施展魔法,但我认为这不是一个好主意。)
  • 您应该在问题中清楚地描述您想要做什么以及您正在构建什么类型的应用程序。请注意,.NET 不仅仅是构建 Web 应用程序,因此并非 .NET 中可用的每个功能都与您的期望相关。您提到的命名空间与 Windows 紧密耦合 - 我希望它是 Win32 API 的包装器,用于在 Windows 中操作 ACL。您正在寻找的可能是基于角色的安全性,如果是 Web 应用程序成员资格提供者和角色提供者。
  • IPrincipalIIdentity 是在 .NET 中进行任何身份验证/授权的两个核心接口。将它们与PrincipalPermission + PrincipalPermissionAttribute 结合起来,你可以构建任何你想要的东西,但也许有现成的解决方案(除了我已经提到的那些,我不知道它们)。

标签: c# .net interface acl abstraction


【解决方案1】:

一个抽象的例子是库nAcl - .NET Access Control List

...“帮助您轻松处理权利矩阵的场景。它可以 也可以通过提供者轻松扩展” ...

特点:

  • 为您处理应用程序的权利
  • 处理权限层次结构
  • 权利在一个地方计算,但由于提供者机制,可以从任何地方检索 (似乎是添加多个来源的相关功能)
  • 在内存提供程序中提供静态权限
  • 路由提供程序处理路由并将提供程序关联到路由
  • Sql 提供程序处理 Db 中的权限

...但我还没有看到 IPrincipal 在接口中的用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多