У меня установлена авторизация ядра .Net через роли пользователя. У меня есть атрибут authorize, установленный на уровне страницы, ограниченный ролями, и у меня есть метод, ограниченный только одной ролью.
Я использую AJAX-вызов через исходный транспортный вызов. У пользователя есть правильный атрибут или роль для вызова метода, но он как-то доходит до метода.
Я должен дважды проверить метод, который является единственным способом защитить мое приложение сейчас.
[HttpGet]
[AutoValidateAntiforgeryToken]
[Authorize(Roles="Administrators")]
public async Task<IActionResult> OnGetDeleteCustomerAsync(cbs_Customers customers)
{
if (!ModelState.IsValid)
{
return Page();
}
if (User.Identity.IsAuthenticated)
if (!(User.IsInRole(Intrafiz.Authorization.Constants.ContactAdministratorsRole)))
{
return Unauthorized();
}
if (customers is cbs_Customers)
{
Customer = customers;
}
else
{
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
return new JsonResult(new
{
success = false,
error = "(Deleting customer): failed to locate customer !"
});
}
try
{
_context.cbs_Customers.Remove(Customer);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException ex)
{
if (!cbs_CustomersExists(Customer.CustomerId))
{
return new JsonResult(new
{
success = false,
error = "(Updating customer): failed to locate customer !"
});
}
else
{
return new JsonResult(new
{
success = false,
error = "(Updating customer): failed to locate customer !" + "\r\n" + ex.Message?.ToString()
});
}
}
return new JsonResult(Customer);
}
Это в конфигурации сайта
services.AddIdentity<ApplicationUser, IdentityRole>(config =>
{
config.SignIn.RequireConfirmedEmail = true;
config.Lockout.MaxFailedAccessAttempts = 5;
config.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromDays(7);
config.Lockout.AllowedForNewUsers = true;
config.User.RequireUniqueEmail = true;
}).AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthenticationCore ();
// Authorization handlers.
services.AddScoped<IAuthorizationHandler,
ContactIsOwnerAuthorizationHandler>();
services.AddSingleton<IAuthorizationHandler,
ContactAdministratorsAuthorizationHandler>();
services.AddSingleton<IAuthorizationHandler,
ContactManagerAuthorizationHandler>();
Это из источника данных кендо
destroy: {
url: window.location.origin + "/Energy/Index?handler=DeleteCustomer",
type: "GET"
},
Пользователь аутентифицируется путем проверки User.Identity.IsAuthorized,
но роль не Администратор или Менеджер, но это все еще вызов от источника данных все еще получает к методу