【问题标题】:.NET security mechanism to restrict access between two Types in the same project?.NET 安全机制来限制同一项目中两个类型之间的访问?
【发布时间】:2011-02-22 19:51:00
【问题描述】:

问题

.NET 框架中是否有一种机制可以在不使用单独的项目/程序集的情况下隐藏一种自定义类型?我不是在谈论将 Type 的成员隐藏在另一种类型中的访问修饰符——我的意思是隐藏 Type 本身。

背景

我在一个 ASP.NET 网站项目中工作,团队决定不对不同的软件层使用单独的项目程序集。因此,我正在寻找一种方法,例如,我不允许其类访问同一 ASP.NET 网站项目中的其他类型的 DataAccess/ 文件夹。换句话说,我想伪造这些层,并在每一层周围设置某种安全机制,以防止它访问另一层。

更多信息和细节...

显然,没有办法使用特定于语言的 OO 关键字来强制执行此限制,因此我正在寻找其他东西,例如:可能是权限框架或代码访问机制,可能是使用元数据(如属性)的东西。甚至限制一个命名空间访问另一个命名空间的东西。我不确定它可能采用的最终形式。

如果这是 C++,我可能会使用 friend 作为解决方案,在这种情况下它不会转换为 C# internal,尽管它们经常被比较。

我并不真正关心解决方案是否真的将类型彼此隐藏或只是使它们无法访问;但是我不想从所有其他类型中锁定一个类型,这是访问修饰符不是解决方案的另一个原因。运行时或设计时的答案就足够了。寻找易于实现的东西,否则不值得努力......

【问题讨论】:

    标签: c# asp.net permissions types web-site-project


    【解决方案1】:

    没有开箱即用的东西;可能有一些 3rd-party 工具可用于将一些规则组合在一起,可能基于命名空间等。类似于custom fx cop rule...

    【讨论】:

    • 我喜欢这个产品,因为它受 Microsoft 支持,可定制,尽管文档还有一些不足之处。
    【解决方案2】:

    您可以使用 NDepend 来执行此操作:

    http://www.ndepend.com/

    NDepend 可以允许您通过指定某些命名空间不应相互引用来强制执行“分层”规则。然后,您将 NDepend 和规则集插入到您的自动构建中,如果有任何轻罪,它将导致构建失败(并提供完整报告)。

    通过这种方式,您可以在程序集中强制实施逻辑软件分层概念,而无需使用项目结构进行物理操作。

    更新

    我昨晚很晚才回答了这个问题,确切地说,就是如何直接解决这个问题。尽管可以使用一种工具来解决问题,但随着项目的发展,在整个团队的一个项目中进行开发很可能会是一种非常痛苦的经历:

    • 除非人们非常自律,否则构建将在分层违规时不断中断。
    • VS 项目文件会出现源代码管理合并抖动 - 不愉快。
    • 如果您想与正在开发的其他应用程序\项目共享程序集,您的重用单元非常大且未定义。这可能导致非常不希望的耦合。

    虽然我不提倡使用大量小型程序集,但围绕核心概念定义的合理数量是非常可行和可取的,例如“UI”、“数据访问”、“业务逻辑”、“公共库”和“共享类型”。

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多