如何在ASP.net MVC应用程序中隔离用户的数据?

时间:2013-12-03 00:18:56

标签: asp.net azure entity-framework-5 azure-sql-database asp.net-mvc-5

所以我在Azure上部署了一个asp.net应用程序(使用MVC5,ASP 4.5,EF)。该应用程序允许用户注册和登录。 但是,一旦登录,任何人都可以看到其他人的数据。

隔离属于不同用户的数据的最佳做法是什么,以便每个用户只能看到他/她创建的数据?

另一个小问题是Facebook如何分离用户的数据?

由于

2 个答案:

答案 0 :(得分:4)

对于用户创建的每条数据,存储其用户ID并仅允许用户查看具有其用户ID的数据。几个例子:

SQL:

SELECT UserDataID, Value FROM UserData WHERE UserID = @UserID;

将用户的ID传递给@UserID参数。

LINQ:

using (var entityFrameworkContext = new MyDataEntities())
{
    var currentUserData = entityFrameworkContext.UserData.Where(userData -> userData.UserID = currentUserID);
}

currentUserID可以是表单身份验证中的用户名或ID,例如:HttpContext.Current.User.Identity.Name

答案 1 :(得分:0)

我完成此任务的方式如下:

在您的控制器中,您需要使用

 public ActionResult Index()
    {
        var currentUser = manager.FindById(User.Identity.GetUserId());
        return View(db.ToDoes.ToList().Where(todo => todo.User.Id == currentUser.Id));
    }

然后,您还可以创建一个管理员角色,然后可以查看用户的所有详细信息并返回ToList()。然后,您可能希望在其上放置[Authorize]方法,仅允许管理员访问。

    [Authorize(Roles="Admin")]
    public async Task<ActionResult> All()
    {
        return View(await db.ToDoes.ToListAsync());
    }

我发现以下项目对理解有很大帮助。 https://github.com/rustd/AspnetIdentitySample

希望这是一些帮助