过滤控制器索引操作中的记录

时间:2015-03-25 07:34:11

标签: asp.net asp.net-mvc-5 asp.net-identity

我正在尝试向索引操作添加条件以仅获取某些记录。这个故事是这样的。

  1. 注册用户具有所有者或ServiceCompany的身份角色
  2. 有一个Owner表和一个Service Companies表,每个表都有一个RegUserID,它根据该用户的角色从Identities表中保存UserID。
  3. 有一个Asset表(要编制索引),其中包含OwnerID和Service CompanyID字段。
  4. 根据我需要识别用户角色的登录用户的UserID,然后使用RegUserID从相关表中获取OwnerID或Service CompanyID,然后根据角色列表获取具有OwnerID或Service CompanyID的资产
  5. 我到目前为止......

    // 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,然后返回资产列表以返回视图。

1 个答案:

答案 0 :(得分:0)

不确定您的数据库设置等。但根据您的问题,您应该能够做到这一点而不必担心什么"角色"用户使用的Linq查询类似于以下

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