Я создаю простое многопользовательское (мультитенантное?) Приложение с ASP.NET MVC3 и EF4, одной базой данных, одной базой кода, доступ всех пользователей приложение, использующее тот же URL. После того, как пользователь вошел в систему, он должен иметь доступ только к своим данным, я использую поставщика членства asp.NET по умолчанию и добавил поле Guid UserId в каждую из таблиц данных. Очевидно, я не хочу, чтобы у пользователя A был какой-либо доступ к данным пользователя B, поэтому я добавил следующее почти к каждому действию на моих контроллерах.
public ActionResult EditStatus(int id)
{
if (!Request.IsAuthenticated)
return RedirectToAction("Index", "Home");
var status = sService.GetStatusById(id);
// check if the logged in user has access to this status
if (status.UserId != GetUserId())
return RedirectToAction("Index", "Home");
.
.
.
}
private Guid GetUserId()
{
if (Membership.GetUser() != null)
{
MembershipUser member = Membership.GetUser();
Guid id = new Guid(member.ProviderUserKey.ToString());
return id;
}
return Guid.Empty;
}
Это повторение определенно кажется неправильным, и должен быть более элегантный способ обеспечения мои пользователи не могут получить доступ к данным друг друга - что мне не хватает?