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