【发布时间】:2011-03-04 14:29:28
【问题描述】:
我正在使用 ASP.NET MVC3 和 EF4、一个数据库、一个代码库构建一个简单的多用户(多租户?)应用程序,所有用户都使用相同的 URL 访问该应用程序。一旦用户登录,他们应该只能访问他们的数据,我使用默认的 asp.NET 成员资格提供程序,并在每个数据表上添加了一个“UserId”Guid 字段。显然我不希望用户 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;
}
这种重复肯定感觉不对,必须有一种更优雅的方式来确保我的用户无法访问彼此的数据——我错过了什么?
【问题讨论】:
标签: asp.net-mvc-3 asp.net-membership