Files
jinko.yikatong/Src/Dlhis.Basic/ObfuscateProviderJsonConverter.cs

50 lines
1.3 KiB
C#

using System.Security.Claims;
using Kurisu.AspNetCore;
using Kurisu.AspNetCore.Authentication.Abstractions;
using Kurisu.AspNetCore.Utils;
using Kurisu.AspNetCore.Utils.Converters;
using Newtonsoft.Json;
namespace Dlhis.Basic;
public class ObfuscateProviderJsonConverter : ObfuscateJsonConverter
{
private readonly int _last;
/// <inheritdoc />
public ObfuscateProviderJsonConverter(int last) : base(last)
{
_last = last;
}
/// <inheritdoc />
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var sp = App.GetServiceProvider(true);
var cache = sp.GetService<RedisCache>();
var currentUser = sp.GetService<ICurrentUser>();
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);
}
}
}