在C#asp.net中获取验证用户的最佳方法
我对如何解决这个问题有些茫然,但希望你们的意见能对我有所帮助 我试图只允许我的“主页/日历”网站的用户查看他们创建的内容。在我看来,要做到这一点,我需要进入每个Create、Add、Remove和Update函数,并使用以下方法获取当前用户ID:在C#asp.net中获取验证用户的最佳方法,c#,asp.net,login,asp.net-mvc-5,C#,Asp.net,Login,Asp.net Mvc 5,我对如何解决这个问题有些茫然,但希望你们的意见能对我有所帮助 我试图只允许我的“主页/日历”网站的用户查看他们创建的内容。在我看来,要做到这一点,我需要进入每个Create、Add、Remove和Update函数,并使用以下方法获取当前用户ID: User.Identity.GetUserId(); 然后,我会将这个UserID与函数运行时存储在表中的UserID进行比较 以下是我的桌子的外观: CREATE TABLE [dbo].[AspNetUserLogins] ( [Logi
User.Identity.GetUserId();
然后,我会将这个UserID与函数运行时存储在表中的UserID进行比较
以下是我的桌子的外观:
CREATE TABLE [dbo].[AspNetUserLogins] (
[LoginProvider] NVARCHAR (128) NOT NULL,
[ProviderKey] NVARCHAR (128) NOT NULL,
[UserId] NVARCHAR (128) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED ([LoginProvider] ASC, [ProviderKey] ASC, [UserId] ASC),
CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);
CREATE TABLE [dbo].[Events] (
[EventID] INT IDENTITY (1, 1) NOT NULL,
[Subject] NVARCHAR (100) NOT NULL,
[Description] NVARCHAR (300) NULL,
[Start] DATETIME NOT NULL,
[End] DATETIME NULL,
[ThemeColor] NVARCHAR (10) NULL,
[IsFullDay] BIT NOT NULL,
[UserId] NVARCHAR (128) NOT NULL,
CONSTRAINT [PK__Event__7944C8701D5AFFC5] PRIMARY KEY CLUSTERED ([EventID] ASC)
);
CREATE TABLE [dbo].[Links] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR (50) NULL,
[Link] VARCHAR (1000) NULL,
[UserId] NVARCHAR (128) NOT NULL,
CONSTRAINT [PK__tmp_ms_x__3214EC07BE58FD26] PRIMARY KEY CLUSTERED ([Id] ASC)
);
我希望有一个更简单或更优雅的解决方案。我最终将把这个项目交给训练营,并向雇主展示
这是我的家庭控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace HomePageCalendar.Controllers
{
public class HomeController : Controller
{
private MyDatabaseEntities _context;
public HomeController()
{
_context = new MyDatabaseEntities();
}
protected override void Dispose(bool disposing)
{
_context.Dispose();
}
public ActionResult New()
{
return View();
}
[HttpPost]
public ActionResult Create(Links home)
{
_context.Links.Add(home);
_context.SaveChanges();
return RedirectToAction("Index", "home");
}
public ActionResult Index(string searchString)
{
var Link = from l in _context.Links
select l;
if (!String.IsNullOrEmpty(searchString))
{
Link = Link.Where(s => s.Name.Contains(searchString));
}
var Name = _context.Links.ToList();
return View(Link);
}
public ActionResult Remove()
{
ViewBag.title = "Remove Links";
ViewBag.homes = _context.Links.ToList();
return View();
}
[HttpPost]
public ActionResult Remove(int[] cheeseIds)
{
foreach (int cheeseId in cheeseIds)
{
Links theCheese = _context.Links.Single(c => c.Id == cheeseId);
_context.Links.Remove(theCheese);
}
_context.SaveChanges();
return Redirect("/");
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
不,你就是这么做的。当用户请求查看或修改数据时,您将检查是否允许当前用户查看或修改该数据。如果他们是,允许它。如果不是,则返回错误或以某种方式提供故障响应。“检查是否允许”的方法有很多,这取决于您的业务逻辑和如何处理失败的检查。@David感谢您的回复。我用我的家庭控制器更新了OP。因此,基本上你是说在每个函数中,我应该验证用户是当前用户?有多种方法可以做到这一点。例如,当用户通过其ID请求记录时,您可以通过该ID和用户ID获取该记录。如果未找到匹配项,则将其视为404。或者只通过ID获取记录,然后编写
if
,查看记录的UserID是否与当前用户匹配。如果没有,则返回“权限被拒绝”错误。基本上,您如何实现它取决于您希望系统如何运行。不,这基本上是您应该如何实现的。当用户请求查看或修改数据时,您将检查是否允许当前用户查看或修改该数据。如果他们是,允许它。如果不是,则返回错误或以某种方式提供故障响应。“检查是否允许”的方法有很多,这取决于您的业务逻辑和如何处理失败的检查。@David感谢您的回复。我用我的家庭控制器更新了OP。因此,基本上你是说在每个函数中,我应该验证用户是当前用户?有多种方法可以做到这一点。例如,当用户通过其ID请求记录时,您可以通过该ID和用户ID获取该记录。如果未找到匹配项,则将其视为404。或者只通过ID获取记录,然后编写if
,查看记录的UserID是否与当前用户匹配。如果没有,则返回“权限被拒绝”错误。基本上,如何实现它取决于您希望系统的行为方式。