我正试图向索引操作添加一个条件,以便只获取某些记录。故事是这样的。
- 注册用户具有所有者或服务公司的身份角色
- 有一个Owner表和一个Service Companies表,每个表都有一个RegUserID,它根据该用户的角色保存Identities表中的UserID
- 有一个资产表(要编制索引),它有一个OwnerID和一个Service CompanyID字段
- 根据登录用户的UserID,我需要识别用户角色,然后使用RegUserID从相关表中获取OwnerID或Service CompanyID,然后根据角色列表列出OwnerID或Services CompanyID的资产
我已经到达…
// GET: Assets
public ActionResult Index()
{
if(Roles.GetRolesForUser().Contains("Owner") == true)
{
// Get OwnerID from Owners table where Owners.RegUserID == User.Identity.GetUserId();
// Get list of assets from Asstes where Assets.OwnerID == OwnerID
}
else if(Roles.GetRolesForUser().Contains("Service Company") == true)
{
// Get ServiceCompanyID from Owners table where ServiceCompanies.RegUserID == User.Identity.GetUserId();
// Get list if assets from Assets where Asstes.ServiceCompanyID == ServiceCompanyID
}
return View(assets);
}
我完全纠结于如何获得OwnerID或ServiceCompanyID,然后返回到视图的资产列表。
不确定你的数据库设置等。但根据你的问题,你应该能够做到这一点,而不必担心用户在Linq Query中的"角色",类似于下面的
var userId = User.Identity.GetUserId();
var asset = from a in context.Assets
join o in context.Owners on a.OwnerId equals o.OwnerId into oa
from asst in oa.DefaultIfEmpty()
join s in context.ServiceCompanies on a.ServiceCompanyId equals s.ServiceCompanyId into sa
from service in sa.DefaultIfEmpty()
where asst.RegUserId == userId || service.RegUserId == userId
select a;
return View(asset);