Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC如何使用ASP.NET成员资格提供程序管理用户内容_Asp.net Mvc_Asp.net Membership_Authorization_User Management_User Generated Content - Fatal编程技术网

Asp.net mvc ASP.NET MVC如何使用ASP.NET成员资格提供程序管理用户内容

Asp.net mvc ASP.NET MVC如何使用ASP.NET成员资格提供程序管理用户内容,asp.net-mvc,asp.net-membership,authorization,user-management,user-generated-content,Asp.net Mvc,Asp.net Membership,Authorization,User Management,User Generated Content,我有5年的ASP.NET Web表单经验,我是ASP.NET MVC新手。我现在正试图通过一些教程、视频教程和书籍来学习MVC。 我正在使用Visual Studio 2012和全新的ASP.NET MVC 4构建一个小型web应用程序来管理我的共同基金投资组合。这应该让我进入新的模式,学到很多新的东西。。。 我的应用程序也应该让其他一些朋友做同样的事情。因此,它必须管理不同用户的公文包。 我首先用实体框架代码构建了一个小数据库,所以我有一些基本模型:基金、投资组合、股票、存款、源代码和用户。一

我有5年的ASP.NET Web表单经验,我是ASP.NET MVC新手。我现在正试图通过一些教程、视频教程和书籍来学习MVC。
我正在使用Visual Studio 2012和全新的ASP.NET MVC 4构建一个小型web应用程序来管理我的共同基金投资组合。这应该让我进入新的模式,学到很多新的东西。。。
我的应用程序也应该让其他一些朋友做同样的事情。因此,它必须管理不同用户的公文包
我首先用实体框架代码构建了一个小数据库,所以我有一些基本模型:基金、投资组合、股票、存款、源代码和用户。一个用户可以拥有多个投资组合,其中包含许多基金。每个用户都有自己的存款列表。每个基金都有许多股票价值(一天)
源模型只是一个表格,我为特定基金的股票数据的每个网站源放了一个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...
}
我真的很感激每一个建议

  • 这是一个你必须自己做出的选择,但我喜欢创建自己的会员提供商,这并不难。有了自己的供应商,你可以用自己的方式实现,而不像10年前微软认为的那样酷。示例:.
    在.NET 4.5中,使用SimpleMembershipProvider创建自己的提供程序更容易

  • 使用[Authorize]属性,您告诉控制器,只有自动调整的用户才会被接受。当用户登录时,您可以将用户名/用户ID放入FormsAuthenticationCookie中,这样您就可以很容易地获取用户用户名/用户ID。如果要在cookie中添加更多数据,还可以在cookie中创建身份验证标记

    为了便于测试,我几乎不建议在HttpContext.User和IPrincipal之间创建绑定


  • 使用Identity 2.0进行身份验证和授权。我觉得这个博客很有帮助。基本上,您将获得基于声明的auth,然后可以使用authorized属性装饰您的操作,例如

    [Authorize(Roles="Admin, Moderators")]
    public ActionResult MyAction(...)
    

    您可以通过控制器中的User.Identity属性查看声明。

    我已经阅读了一些有关自定义成员资格提供程序实现的信息,但我认为我的实现与ASP.NET集成的实现没有太大区别。。。也许我会用一些更可靠的SHA256或SHA512更改旧的SHA1默认值的哈希函数。在我的场景中,还有哪些优势呢?我想你的数据库中会有很多你不会用到的实体。最大的损失是您无法进行任何配置,但另一方面,当您已经获得了可以使用的东西时,您可以节省一些时间。但是,如果您认为标准提供程序可以满足您的需要,为什么不使用它呢,这是微软提供的一个更灵活的成员资格提供者版本,非常有趣。我会试试看。。。我也是ASP.NET成员资格提供商的新手,因为我使用Oracle DB和自定义用户和配置文件表开发了大多数应用程序。