Авторизация на основе утверждений - пользовательское требование - PullRequest
0 голосов
/ 12 апреля 2020

Я узнаю об авторизации на основе утверждений и хочу создать политику так, чтобы, если значение утверждения для пользователя 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...