Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阻止用户查看未分配给其用户ID的表中的项目_C#_.net_Asp.net Identity_Entity - Fatal编程技术网

C# 阻止用户查看未分配给其用户ID的表中的项目

C# 阻止用户查看未分配给其用户ID的表中的项目,c#,.net,asp.net-identity,entity,C#,.net,Asp.net Identity,Entity,如果用户试图操纵url以查看不属于他们的数据组,则尝试抛出错误页面 因此,当一张卡被添加到数据组表中时,当前用户的id将与该卡一起附加到该表中 在这里,我得到了user的id,然后将其与deck中userId属性的id进行比较。如果当前用户的ID不匹配,那么我想抛出一个错误页面,如下所示 这不管用。有什么想法吗?当我调试时,它说item currentUserId和item.UserId具有相同的值,即使我使用url移动到不属于它们的另一组 我的控制器: public ActionRes

如果用户试图操纵url以查看不属于他们的数据组,则尝试抛出错误页面

因此,当一张卡被添加到数据组表中时,当前用户的id将与该卡一起附加到该表中

在这里,我得到了user的id,然后将其与deck中userId属性的id进行比较。如果当前用户的ID不匹配,那么我想抛出一个错误页面,如下所示

这不管用。有什么想法吗?当我调试时,它说item 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;  }
}
公共类甲板
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串注释{get;set;}
[显示名称(“卡片”)]
公共虚拟列表卡{get;set;}
公共字符串用户标识{get;set;}
}

您要检查两次相同的值,所以两次都是相同的。首先,您将获得与当前用户匹配的所有组:

var userDecks = _context.Decks.Where(u => u.UserId == currentUserId);
foreach (var item in userDecks)
{
    if (currentUserId != item.UserId)
    {
        return View("Error");
    }
}
然后检查是否所有与当前用户匹配的数据组。。。匹配当前用户:

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);
}

你要检查两次相同的值,所以两次都是相同的。首先,您将获得与当前用户匹配的所有组:

var userDecks = _context.Decks.Where(u => u.UserId == currentUserId);
foreach (var item in userDecks)
{
    if (currentUserId != item.UserId)
    {
        return View("Error");
    }
}
然后检查是否所有与当前用户匹配的数据组。。。匹配当前用户:

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);
}
这里是“var userDecks=_context.Decks.Where(u=>u.UserId==currentUserId);”你是说这个用户给我所有的Decks,而在你的foreach中是检查同一个用户。这里是“var userDecks=_context.Decks.Where(u=>u.UserId==currentUserId);”你是说这个用户给我所有的Decks,在您的foreach中,检查的是同一个用户。