如何在 Asp.net MVC 中实现 plugins/addons?

How to implement plugins/addons in Asp.net MVC?

我真的无法理解我必须实现的功能之一。客户可以拥有一堆他们付费的插件(插件列表在数据库 table 中)。我必须实现仅显示客户已付费的插件的功能。

我知道我可以在视图中创建一堆 if 语句,但感觉这有点 "hacky" 解决方案,工作起来会很痛苦。

实现此类功能的正确方法是什么?

由于您谈论的是 功能 而不是插件,我建议您考虑使用 AuthorizeAttribute 和角色来控制对每个功能的访问 and/or 功能集。

public class FeatureController : Controller
{
    [Authorize(Roles = "Feature1")]
    public ActionResult Feature1()
    {
        // Implement feature here...

        return View();
    }

    [Authorize(Roles = "Feature1")]
    [HttpPost]
    public ActionResult Feature1(Model model)
    {
        // Implement feature here...

        return View();
    }

    [Authorize(Roles = "Feature2")]
    public ActionResult Feature2()
    {
        // Implement feature here...

        return View();
    }

    // Other features...
}

那么 Feature1 角色中的任何用户都将有权访问 Feature1Feature2 角色将有权访问 Feature2,等等

您可以将 AuthorizeAttributeMvcSiteMapProvider's security trimming feature 结合使用,使菜单项仅在用户处于适当角色时可见。

完全披露:我是MvcSiteMapProvider的主要贡献者。