3

Итак, у меня есть приложение asp.net (с использованием MVC5, ASP 4.5, EF), развернутое на Azure. Приложение позволяет пользователям зарегистрироваться и войти в систему. Однако, после входа в систему, каждый может видеть данные всех остальных.Как я могу изолировать данные пользователей в приложении ASP.net MVC?

Какова наилучшая практика для изоляции данных, принадлежащих разным пользователям, чтобы каждый пользователь мог видеть только данные, которые он создает?

Еще один маленький вопрос: каким образом Facebook отделяет данные своих пользователей?

Благодаря

ответ

4

Для каждой части данных, созданных пользователем, хранить их идентификатор пользователя и только позволяют пользователям просматривать данные, которые их идентификатор пользователя. Несколько примеров:

SQL:

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

Pass в идентификатор пользователя для параметра @UserID.

LINQ:

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

Где currentUserID может быть имя пользователя или идентификатор из проверки подлинности форм, например: HttpContext.Current.User.Identity.Name.

+0

Да, строительство применения в многопользовательском в значительной степени сводится к этому. Это хорошая идея для обеспечения безопасности, поэтому они не могут видеть данные других, просто изменяя URL-адрес. Вы также можете посмотреть на SQL Azure Federations, что делает его более масштабируемым. – Craig

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

Надежда это имеет некоторую помощь

Смежные вопросы