93 lines
2.4 KiB
C#
93 lines
2.4 KiB
C#
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;
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ObfuscateProviderOnlyAdminJsonConverter : ObfuscateJsonConverter
|
|
{
|
|
private readonly int _last;
|
|
|
|
/// <inheritdoc />
|
|
public ObfuscateProviderOnlyAdminJsonConverter(int last) : base(last)
|
|
{
|
|
_last = last;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
{
|
|
var sp = App.GetServiceProvider(true);
|
|
var currentUser = sp.GetService<ICurrentUser>();
|
|
|
|
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);
|
|
}
|
|
}
|
|
} |