[英]ASP.NET MVC 5 Identity restrict access to account
我发现了大量有关身份的信息,但没有专门解决这种非常常见的情况。
我有一个名为ShowAccount()的控制器,该控制器应显示当前登录用户的帐户数据,并阻止他看到除其自己帐户以外的任何内容。
同样,未经身份验证的用户也完全不能访问此功能。
我该如何实现?
谢谢
未经身份验证的用户
K,我将从简单的请求开始,要阻止未经身份验证的用户完全访问您的控制器,只需添加以下属性:
[Authorize]
上方的控制器,或者如果您想允许某些\\禁用控制器中的某些功能,可以将其置于特定功能的上方。
如果要阻止整个控制器并只允许几个功能,可以使用此属性:
[AllowAnonymous]
限制用户访问自己的数据
我在我的一个项目中正在做类似的事情,所以我认为这可能会有所帮助,没什么特别的,我很想听听自己的更好选择。
对于第二个问题,我假设您有一个存储数据的模型,并且该数据与UserID(可能是外键?)有某种联系。
您可以在控制器中进行操作-过滤发送回给用户的数据,即在视图上,而不是返回:
return View(db.MyDB.ToList());
返回:
MyDBClass data = db.MyDB.Where(u => u.UserID == GetUserID()).ToList();
return View(data);
假设GetUserID()
是一个为您提供当前用户ID的函数,以防万一您在MVC中使用默认身份验证,我也可以在此处共享它。
该解决方案还不完善,您需要在其他任何操作(例如edit \\ delete \\ create或您支持的其他操作)中继续执行该解决方案,您需要始终通过比较userID和用户ID来检查用户是否仅访问其数据在数据库中保存到请求中的一个。
希望这可以帮助。
我也遇到了类似的挑战,但我得到了我的帮助
public ActionResult Create()
{
return View();
}
// POST: ArtistGig/Create
[HttpPost]
public ActionResult Create(ArtistGig artistGig)
{
var userid = User.Identity.GetUserId();
///
var artist = db.ArtistHubs.SingleOrDefault(a => a.ApplicationUserId == userid).Id;
artistGig.ArtistHubId = artist;
db.ArtistGigs.Add(artistGig);
db.SaveChanges();
return RedirectToAction("Index");
}
User.Identity.GetUseId用于根据您使用的DbContext查询已登录的用户ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.