阻止用户查看 table 中未分配给其用户 ID 的项目
Stop user from viewing items from table not allocated to their userId
如果用户试图操纵 url 查看不属于他们的牌组,则尝试抛出错误页面。
因此,当将卡片添加到卡片组 table 时,当前用户的 ID 将与卡片一起附加到 table。
我在这里获取用户的 ID,然后将其与卡片组中用户 ID 属性 的 ID 进行比较。如果当前用户的 ID 不匹配,那么我想抛出一个错误页面,如下所示。
这行不通。有任何想法吗?当我调试时它说项目 currentUserId 和 item.UserId 具有相同的值,即使我使用 url 移动到不属于它们的不同平台
我的控制器:
public ActionResult Details(int id)
{
var currentUserId = User.Identity.GetUserId();
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
if (deck == null)
return HttpNotFound();
var userDecks = _context.Decks.Where(u => u.UserId ==
currentUserId);
foreach (var item in userDecks)
{
if (currentUserId != item.UserId)
{
return View("Error");
}
}
return View(deck);
}
我的模型供参考:
public class Deck
{
public int id { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
[DisplayName("Card")]
public virtual List<Card> Card { get; set; }
public string UserId { get; set; }
}
您两次检查相同的值,因此两次都相同。首先你得到与当前用户匹配的所有牌组:
var userDecks = _context.Decks.Where(u => u.UserId == currentUserId);
然后检查是否所有与当前用户匹配的牌组...与当前用户匹配:
foreach (var item in userDecks)
{
if (currentUserId != item.UserId)
{
return View("Error");
}
}
他们总是会的。
请注意,在所有这些逻辑中,您已经放弃了给定 id
:
指定的原始套牌
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
无需检查当前用户拥有的 所有 套牌,您实际上只需要检查指定的套牌。例如:
public ActionResult Details(int id)
{
var currentUserId = User.Identity.GetUserId();
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
if (deck == null)
return HttpNotFound();
if (deck.UserId != currentUserId)
return View("Error");
return View(deck);
}
如果用户试图操纵 url 查看不属于他们的牌组,则尝试抛出错误页面。
因此,当将卡片添加到卡片组 table 时,当前用户的 ID 将与卡片一起附加到 table。
我在这里获取用户的 ID,然后将其与卡片组中用户 ID 属性 的 ID 进行比较。如果当前用户的 ID 不匹配,那么我想抛出一个错误页面,如下所示。
这行不通。有任何想法吗?当我调试时它说项目 currentUserId 和 item.UserId 具有相同的值,即使我使用 url 移动到不属于它们的不同平台
我的控制器:
public ActionResult Details(int id)
{
var currentUserId = User.Identity.GetUserId();
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
if (deck == null)
return HttpNotFound();
var userDecks = _context.Decks.Where(u => u.UserId ==
currentUserId);
foreach (var item in userDecks)
{
if (currentUserId != item.UserId)
{
return View("Error");
}
}
return View(deck);
}
我的模型供参考:
public class Deck
{
public int id { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
[DisplayName("Card")]
public virtual List<Card> Card { get; set; }
public string UserId { get; set; }
}
您两次检查相同的值,因此两次都相同。首先你得到与当前用户匹配的所有牌组:
var userDecks = _context.Decks.Where(u => u.UserId == currentUserId);
然后检查是否所有与当前用户匹配的牌组...与当前用户匹配:
foreach (var item in userDecks)
{
if (currentUserId != item.UserId)
{
return View("Error");
}
}
他们总是会的。
请注意,在所有这些逻辑中,您已经放弃了给定 id
:
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
无需检查当前用户拥有的 所有 套牌,您实际上只需要检查指定的套牌。例如:
public ActionResult Details(int id)
{
var currentUserId = User.Identity.GetUserId();
var deck = _context.Decks.SingleOrDefault(d => d.id == id);
if (deck == null)
return HttpNotFound();
if (deck.UserId != currentUserId)
return View("Error");
return View(deck);
}