You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定产品组扩展用户可访问的产品子集?

实现方案

要满足新增需求,你需要将原有权限条件(分类+产品线交集)与产品组匹配条件通过逻辑或(||)组合,这样既保留原有权限的产品,又额外加入指定产品组的产品。具体实现步骤如下:

1. 预处理用户产品组列表

先将用户账号中逗号分隔的组代码转为干净的字符串列表(去除可能的空格):

// 从用户实体获取组代码,示例值为"groupcode1,groupcode2"
var userGroupCodes = currentUser.GroupCodes.Split(',')
                                           .Select(g => g.Trim())
                                           .ToList();

2. 重构LINQ查询

将原有两个Where的逻辑(相当于逻辑与&&)合并,再与产品组匹配条件做逻辑或||,确保符合任一条件的产品都被筛选出来:

products = products.Where(p => 
    // 原有权限条件:用户同时拥有该产品的分类权限和产品线权限
    (dbContext.UserProductCategories.Any(m => m.Login == login && m.CategoryCode == p.CategoryCode)
     && dbContext.UserProductLines.Any(m => m.Login == login && m.ProductLineCode == p.ProductLineCode))
    // 新增产品组条件:产品属于用户指定的任一产品组
    || dbContext.ProductGroups.Any(g => 
        userGroupCodes.Contains(g.GroupCode) && g.ProductId == p.Id)
).AsQueryable();

模型关联简化场景

如果你的Product模型直接包含ProductGroupCode字段(无需通过ProductGroup中间表关联),可以简化产品组条件:

// 简化版:Product直接映射产品组编码字段
|| userGroupCodes.Contains(p.ProductGroupCode)

关键逻辑说明

  • 原有逻辑要求同时满足分类和产品线权限(连续调用两个Where等价于逻辑与&&)
  • 新增逻辑允许只要产品属于用户指定的产品组,无论原有权限如何都纳入结果集
  • 若用户无指定产品组(userGroupCodes为空),Contains会返回false,新增条件自动失效,查询退化为原有逻辑

内容的提问来源于stack exchange,提问作者pepr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.10 08:03:11