所以我在Azure上部署了一个asp.net应用程序(使用MVC5,ASP 4.5,EF)。该应用程序允许用户注册和登录。 但是,一旦登录,任何人都可以看到其他人的数据。
隔离属于不同用户的数据的最佳做法是什么,以便每个用户只能看到他/她创建的数据?
另一个小问题是Facebook如何分离用户的数据?
由于
答案 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
希望这是一些帮助