Я узнаю об авторизации на основе утверждений и хочу создать политику так, чтобы, если значение утверждения для пользователя loginIn больше значения, чем значение. Значение редактируемого пользователя превышает значение, если политика не будет выполнена, но я не понимаю, как проверить это условие ,
Ниже приведен код, который я пробовал
public static List<Claim> claimstore = new List<Claim>()
{
new Claim("Super Admin","1"),
new Claim("Admin","2"),
new Claim("Employee","3"),
new Claim("Customer","4")
};
Вот код пользовательского требования:
namespace Mobile_Store_MS.Security
{
public class EditAdminPolicy: AuthorizationHandler<EditAdminHandler>
{
public readonly UserManager<ApplicationUser> userManager;
public EditAdminPolicy(UserManager<ApplicationUser> Usermanager)
{
userManager = Usermanager;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, EditAdminHandler requirement)
{
var authFilterContext = context.Resource as AuthorizationFilterContext;
if (authFilterContext == null)
{
await Task.CompletedTask;
}
string loggedInAdminId = context.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
var LoginUser = await userManager.FindByIdAsync(loggedInAdminId);
//string adminIdBeingEdited = authFilterContext.HttpContext.Request.Query["userId"];
string[] a = authFilterContext.HttpContext.Request.Path.Value.Split('/');
string adminIdBeingEdited = a[a.Length - 1];
var user = await userManager.FindByIdAsync(adminIdBeingEdited);
if (user == null) context.Fail();
if (!context.User.IsInRole("Super Admin"))
{
//var c= await userManager.GetClaimsAsync(LoginUser);
//int n;
//bool isNumeric = int.TryParse(c.Select(l=> l.Value), out n);
if (!await userManager.IsInRoleAsync(user, "Super Admin"))
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
}
else
{
context.Succeed(requirement);
}
await Task.CompletedTask;
}
}
}