using System.Security.Claims; using Kurisu.AspNetCore; using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.Cache; using Kurisu.AspNetCore.Utils.Converters; using Newtonsoft.Json; namespace Dlhis.Basic.Utils; public class ObfuscateProviderJsonConverter : ObfuscateJsonConverter { private readonly int _last; /// public ObfuscateProviderJsonConverter(int last) : base(last) { _last = last; } /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var sp = App.GetServiceProvider(true); var cache = sp.GetService(); var currentUser = sp.GetService(); var range = cache.ListRange("datapermission:role"); if (range.Contains(currentUser.GetUserClaim(ClaimTypes.Role))) { writer.WriteValue(value); } else { var v = value?.ToString() ?? string.Empty; var vc = v.ToCharArray().Reverse().ToList(); for (int i = 0; i < vc.Count; i++) { if (i + 1 > _last) { vc[i] = '*'; } } vc.Reverse(); v = string.Join("", vc); writer.WriteValue(v); } } } public class ObfuscateProviderOnlyAdminJsonConverter : ObfuscateJsonConverter { private readonly int _last; /// public ObfuscateProviderOnlyAdminJsonConverter(int last) : base(last) { _last = last; } /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var sp = App.GetServiceProvider(true); var currentUser = sp.GetService(); var role = currentUser.GetRole(); if (role is "admin" or "tenant-admin") { writer.WriteValue(value); } else { var v = value?.ToString() ?? string.Empty; var vc = v.ToCharArray().Reverse().ToList(); for (int i = 0; i < vc.Count; i++) { if (i + 1 > _last) { vc[i] = '*'; } } vc.Reverse(); v = string.Join("", vc); writer.WriteValue(v); } } }