检查登录用户是否与登录用户相同
本文关键字:用户 登录 是否 检查 | 更新日期: 2023-09-27 18:27:14
我正在开发一个论坛,并试图创建一个"编辑页面"。但我只想让创建帖子的用户能够看到"编辑控件" 这就是我现在的处境: 在评论中添加了答案@if (WHAT TO TYPE HERE)
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
您需要将当前用户与文章的原始作者进行比较。我想你有数据库吧?
假设你有一个论坛线程/帖子的模型:
public class ForumPost
{
public int Id { get; set; }
public string Author { get; set; }
// [...] Additional fields.
}
例如,Author
字段应该包含创建帖子的用户的用户名。查看帖子时,您应该:
- 从存储库中检索
- 将当前用户
HttpContext.Current.User.Identity.Name
与帖子Model.Author
的作者进行比较
如果你想在你看来做到这一点,你可以这样做:
@if (HttpContext.Current.User.Identity.Name.Equals(Model.Author))
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
我没有带编译器,但这段代码应该可以工作。
然而,我不建议直接这样做。您应该创建一个视图模型,其中包含满足视图要求的所有必要字段。
如果还没有在其他地方进行,请首先检查用户是否经过身份验证,然后考虑您正在使用的身份验证类型(您应该在问题中提供更多详细信息)。例如,如果您使用windows身份验证,则属性"User.Identity.Name"也包含域
if (HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.Identity.Name.Equals(Model.Author))
在视图中进行这种检查是完全可以的,因为你已经意识到这纯粹是一个用户体验功能:这个开关的作用应该只是让按钮可见,你不应该给它任何安全问题。
"是否允许用户编辑帖子"的安全性必须在编辑控制器操作的后端进行检查,您必须再次进行此检查。始终在Get方法的开头检查谁能够执行某个操作。
好的,谢谢你的回答,但我找到了另一种方法,我做的方法是
控制器:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Thread thread = db.Threads.Find(id);
string userId = User.Identity.GetUserId();
if (thread == null || thread.ApplicationUserId != userId)
{
return HttpNotFound();
}
ViewBag.CategoryId = new SelectList(db.Categorys, "Id", "Title", thread.CategoryId);
return View(thread);
}
[HttpPost]
[ValidateInput(false)]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,Content,CategoryId")] Thread thread)
{
if (ModelState.IsValid)
{
Thread t = db.Threads.Include(m => m.ApplicationUser).FirstOrDefault(m => m.Id == thread.Id);
t.Content = thread.Content;
t.Title = thread.Title;
db.Entry(t).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Post", "Threads", new { @id = thread.Id });
}
return View(thread);
}
视图:
@if (Model.ApplicationUserId == User.Identity.GetUserId())
{
@Html.ActionLink("Edit", "Edit", "Threads", new { @id = Model.Id }, null)
}
起作用了:)
感谢您的所有回复