ASP.NET MVC如何使用ASP.NET Membership Provider管理用户内容

6

我有5年的ASP.NET Web Forms经验,对于ASP.NET MVC还是新手。现在我正在尝试通过教程、视频教程和书籍学习MVC。
我使用Visual Studio 2012和全新的ASP.NET MVC 4来构建一个小型Web应用程序来管理我的共同基金组合。这将让我进入新模式并学习很多新东西...
我的应用程序还应该让其他朋友这样做。所以它必须能够管理不同用户的投资组合。
我用Entity Framework Code First构建了一个小型数据库,因此我有一些基本模型:Fund、Portfolio、Share、Deposit、Source和User。一个用户可以拥有许多投资组合,里面有许多基金。每个用户都有自己的存款列表。每个基金有许多份额价值(一天/一个)。
Source模型只是一个表格,其中我为每个网站源放置一个URL,以获取特定基金的股票数据。因此,一个基金有多个来源。然后,我使用Scraper类每天从这些网站获取数据。
这是应用程序的主要结构。现在,我需要知道最好的方法是:

1)管理用户账户
我应该将ASP.NET成员身份数据库结构集成到我的数据库中,以代替我的自定义用户表来管理用户吗?

2)管理用户内容:组合、基金等。
在MVC模式中,实现身份验证和所有授权验证的最简单和最优雅的方法是什么,使用户可以获取自己的数据?我需要在每个控制器的每个操作中检查这个吗?

换句话说,我该如何实现我的控制器?例如:

[Authorize]
public class PortfolioController : Controller
{
    private FundMonitorContext db = new FundMonitorContext();

    public ActionResult Index()
    {
        // Check user ID and give back to the view only his portfolios...

        var portfolio = db.Portfolios.List();
        return View(portfolio.ToList());
    }

    ...

    public ActionResult Details(int id = 0)
    {
        ...
    }

    //Other actions...
}

我非常感谢每一个建议!


1
请查看 SimpleMembershipProvider 的文档:http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx 。它是微软提供的 Membership Providers 更加灵活的版本。 - Daniel Powell
挺有趣的。我会试一下...我也是新手ASP.NET Membership Providers,因为我大多数应用程序都是使用Oracle DB和自定义用户和配置文件表开发的。 - Cheshire Cat
2个回答

0

0
  1. 这是你必须自己做出的选择,但我喜欢创建自己的成员资格提供程序,而且并不难。有了自己的提供程序,您可以按照自己的方式进行设置,而不是像Microsoft在10年前认为很酷的那样。例如:http://www.codeproject.com/Articles/165159/Custom-Membership-Providers
    在.NET 4.5中,使用SimpleMembershipProvider创建自己的提供程序更加容易。

  2. 使用[Authorize]属性告诉控制器只接受经过授权的用户。当用户登录时,您可以将用户名/用户ID放入FormsAuthentication cookie中,因此您可以非常轻松地获取用户的用户名/用户ID。如果要在其中放置更多数据,还可以在cookie中创建Authtication ticktes。

    为了使测试更加容易,我强烈建议在HttpContext.User和IPrincipal之间创建绑定,http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx


我已经阅读了一些关于实现自定义成员资格提供程序的内容,但我认为我的实现与ASP.NET集成的实现并没有太大的区别...也许我会将旧的SHA1默认哈希函数更改为更可靠的SHA256或SHA512。在我的情况下,还有哪些其他优点呢? - Cheshire Cat
我认为你的数据库中会有很多你不会使用的实体。最大的损失是你无法进行任何配置,但另一方面,当你已经拥有可以使用的东西时,你可以节省一些时间。但如果你认为标准提供商能够满足你的需求,为什么不使用它呢? - Rikard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接