【发布时间】:2021-03-22 12:16:48
【问题描述】:
当我想将UserID 传递给我的控制器并限制对Ticket 的访问时,我收到以下错误消息
所以每个用户只能看到自己的票,但是Admin可以看到所有的票。
var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
到目前为止,我尝试的是这样的:
方法一
var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId = account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
方法二
var obj = _unitOfwork.Ticket.GetAll(filter: (x => isAdministrator || x.UserId = account.FirstOrDefault().Id), includeProperties: "TicketType,ApplicationUser");
方法 3(当我使用这样的东西时,我得到 x 作为不存在的上下文)
The name 'x' does not exist in the current context
var obj = _unitOfwork.Ticket.GetAll(filter: (x => isAdministrator) || (x.UserId = account.FirstOrDefault().Id), includeProperties: "TicketType,ApplicationUser");
我不知道我在哪里犯了错误以及我做错了什么,但无论我尝试什么,我总是收到错误消息。 我在这里检查了几个帖子
知道如何解决这个问题吗?
更新
这是我这个函数的完整代码
public IActionResult GetAll()
{
var username = User.FindFirst(ClaimTypes.Name).Value;
var account = _unitOfwork.ApplicationUser.GetFirstOrDefault(a => a.UserName.Equals(username));
var isAdministrator = User.IsInRole("Admin");
var obj = _unitOfwork.Ticket.GetAll(filter: x => x.isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
return Json(new { data = obj });
}
【问题讨论】:
-
你试试括号吗?
isAdministrator || (x.UserId == account.FirstOrDefault().Id) -
他尝试过,但在所示示例中,他使用了
=而不是== -
您是否注意到
account.FirstOrDefault()可以返回默认值,可能是null? -
我要问,什么是传递用户ID给控制器?如果这是来自浏览器(或任何客户端控制器用户代理),您必须意识到任何人都可以伪造他们想要的任何用户 ID。
-
您描述了您尝试的 3 种方法。但是在所有 3 中,您都使用 = 运算符进行赋值,而不是与 == 进行比较。所以我有点困惑,因为在你最初的代码行中,你实际上是用 == 进行比较。你能提供更多关于这方面的信息吗?
标签: c# entity-framework-core asp.net-core-mvc