当我想将UserID
传递给我的控制器并且对Ticket
的访问受限时,我收到以下错误消息 因此,每个用户只能看到自己的工单,但Admin
可以看到所有的工单。
var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
到目前为止,我尝试的是这样的:
方法 1
var obj = _unitOfwork.Ticket.GetAll(filter: x => isAdministrator || x.UserId = account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");
方法 2
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");
我不知道我在哪里犯了错误,我做错了什么,但无论我尝试什么,我总是收到错误消息。 我在这里检查了几个帖子
帖子 1
帖子 2
知道如何解决这个问题吗?
更新
这是我对这个函数的完整代码
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 });
}
在你的方法中,你使用了=
而不是==
,不像==
是一个比较,有一个布尔结果=
正在分配,其值是根据变量类型确定的,变量类型在你的情况下int
(x.UserId
)。 并且||
只能应用于布尔类型:
(x => isAdministrator) || (x.UserId = account.FirstOrDefault().Id)
//-------boolean------- ---int---
从你的初始代码中获取(并假设isAdministrator是一个布尔值)
var obj = _unitOfwork.Ticket.GetAll(filter: x => x.isAdministrator || x.UserId == account.FirstOrDefault().Id, includeProperties: "TicketType,ApplicationUser");