using AgriculturalPlatform.Api.Data; using AgriculturalPlatform.Api.Models; using Microsoft.EntityFrameworkCore; namespace AgriculturalPlatform.Api.Services; /// /// 数据权限:根据当前用户角色计算其可见的组织范围 /// - 系统管理员:全部 /// - 公司管理员:本公司 + 旗下收购站 /// - 收购站员工:本站 /// - 收购个体:本人 /// public class DataScopeService(AppDbContext db) { /// 返回可见组织 ID 集合;null 表示全部可见 public async Task?> GetVisibleOrgIdsAsync(CurrentUser? user) { if (user is null) return new HashSet(); if (user.IsSuperAdmin) return null; var ids = new HashSet(); switch (user.Role) { case UserRole.CompanyAdmin: if (user.OrgId.HasValue) { ids.Add(user.OrgId.Value); var stationIds = await db.Organizations .Where(o => o.ParentId == user.OrgId && o.Type == OrgType.Station) .Select(o => o.Id).ToListAsync(); ids.UnionWith(stationIds); } break; case UserRole.StationStaff: case UserRole.Individual: if (user.OrgId.HasValue) ids.Add(user.OrgId.Value); break; } return ids; } }