繁体   English   中英

ASP.NET MVC 5身份限制对帐户的访问

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM