public class PermissionRequirementHandler : AuthorizationHandler
{
private static List_permissionGrantedCaches;
private readonly TokenHttpClient _tokenHttpClient;
public PermissionRequirementHandler(TokenHttpClient tokenHttpClient)
{
_tokenHttpClient = tokenHttpClient;
}
protected override async Task HandleRequirementAsync(
AuthorizationHandlerContext context,
PermissionRequirement requirement)
{
if ((await PermissionGranted(requirement.PermissionName)))
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
//return Task.CompletedTask;
}
protected async Task<bool> PermissionGranted(string permissionName)
{
_permissionGrantedCaches= _permissionGrantedCaches ?? new List();
var grantedCache = _permissionGrantedCaches.FirstOrDefault(p => p.PermissionName == permissionName);
if (grantedCache != null)
{
return grantedCache.IsGranted;
}
else
{
_permissionGrantedCaches.Clear();
//获取所有权限
FieldInfo[] fis = typeof(PermissionData).GetFields();
List<string> pinfoList = new List<string>();
foreach (FieldInfo pinfo in fis)
{
pinfoList.Add(pinfo.GetRawConstantValue().ToString());
}
var response = await _tokenHttpClient.PostAsJsonWithTokenAsync($"/api/Test/authorization/authorize", pinfoList);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
_permissionGrantedCaches.AddRange(JsonConvert.DeserializeObject>(content));
var grantedCacheNew = _permissionGrantedCaches.FirstOrDefault(p => p.PermissionName == permissionName);
if (grantedCacheNew != null)
{
return grantedCacheNew.IsGranted;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
}
|