fix(数据权限): 修复 DataScopeContext 缓存 JSON 反序列化失败
将 IReadOnlySet/IReadOnlyList 改为 HashSet/List 等可序列化类型;缓存读取失败时自动重建。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
5f1f16c9ad
commit
11520d014b
@ -14,17 +14,17 @@ public sealed class DataScopeContext
|
||||
|
||||
public string DataResourceCode { get; init; } = string.Empty;
|
||||
|
||||
public IReadOnlySet<Guid> OrganizationIds { get; init; } = new HashSet<Guid>();
|
||||
public HashSet<Guid> OrganizationIds { get; init; } = [];
|
||||
|
||||
public int DataScope { get; init; } = DataPermConstants.DataScopePersonal;
|
||||
|
||||
public IReadOnlyList<int> ResolvedOwnerIds { get; init; } = [];
|
||||
public List<int> ResolvedOwnerIds { get; init; } = [];
|
||||
|
||||
public IReadOnlyDictionary<string, string[]>? BizFilters { get; init; }
|
||||
public Dictionary<string, string[]>? BizFilters { get; init; }
|
||||
|
||||
public IReadOnlySet<int> SecretLevels { get; init; } = new HashSet<int>(DataPermConstants.DefaultSecretLevels);
|
||||
public HashSet<int> SecretLevels { get; init; } = [.. DataPermConstants.DefaultSecretLevels];
|
||||
|
||||
public IReadOnlyList<CompiledFilter> CustomFilters { get; init; } = [];
|
||||
public List<CompiledFilter> CustomFilters { get; init; } = [];
|
||||
}
|
||||
|
||||
public sealed class CompiledFilter
|
||||
|
||||
@ -22,7 +22,15 @@ public class DataPermContextCache(IDistributedCache cache) : IScopedDependency
|
||||
return null;
|
||||
}
|
||||
|
||||
return JsonSerializer.Deserialize<DataScopeContext>(bytes, JsonOptions);
|
||||
try
|
||||
{
|
||||
return JsonSerializer.Deserialize<DataScopeContext>(bytes, JsonOptions);
|
||||
}
|
||||
catch (JsonException)
|
||||
{
|
||||
// 旧缓存或类型变更导致反序列化失败时重建
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Task SetAsync(DataScopeContext context, CancellationToken cancellationToken = default)
|
||||
@ -212,7 +220,7 @@ public class EffectiveScopeBuilder(DataPermRepository repository, DataPermContex
|
||||
})
|
||||
.ToList();
|
||||
|
||||
IReadOnlyList<int> resolvedOwnerIds = [];
|
||||
List<int> resolvedOwnerIds = [];
|
||||
if (dataScope is DataPermConstants.DataScopeTeam or DataPermConstants.DataScopeDepartment)
|
||||
{
|
||||
if (user.OrganizationId is not { } ownerOrg || ownerOrg == Guid.Empty)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user