gpt4 book ai didi

c# - 静态方法作为契约(Contract)的一部分

转载 作者:太空狗 更新时间:2023-10-30 01:25:07 26 4
gpt4 key购买 nike

我正在为 Web 应用程序中的模型实现访问控制基础架构。该库有一个上下文类, Controller (可能还有 View )使用它来确定当前用户是否可以访问某个对象。为了使相关信息接近目标对象,我决定将访问检查请求从上下文对象传递给模型本身。

实现这种模型对象修改机制几乎是微不足道的。声明一个接口(interface),比如 ICheckModifyAccess ;并在您的模型中实现它。删除检查也是如此。在这两种情况下,都可以询问模型实例是否可以修改或删除它们。

不幸的是,读取和创建操作并非如此。这些操作需要我向模型 提出问题。因此,为此使用接口(interface)不是一种选择。

我最终创建了一个属性,CheckCreateAccessAttribute ,然后最终使用此属性将静态函数标记为接口(interface)函数。然后,在我的上下文对象中,我可以使用反射来检查是否存在这样的标记函数,如果它与我期望的签名匹配,并最终调用它。如果有所不同,创建访问检查的方法是 public bool CanCreate<TObj>(); .支持访问控制的典型模型会在类中添加如下内容:

[CheckCreateAccess]
public static bool CanCreate()
{
return true;
}

我的 C# 还不是很流利,我总觉得自己做错了什么。你能推荐一个更优雅的选择吗?特别是,你能摆脱检查 TObj 吗?通过反射(reflection)?

最佳答案

听起来您在对象类而不是 separating them 中合并了关注点.

“使相关信息接近目标对象”的诱惑可能导致您采用这种结构。

也许您可以改为在单独的类中处理权限,例如参见 this article .

关于c# - 静态方法作为契约(Contract)的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com