у вас есть функция входа в систему для администратора? или способ аутентификации пользователя?
если нет, то это потому, что приложение пытается получить доступ к функции, предназначенной для Role = Constants.AdministratorRole, во время аутентификации из куки (поскольку вы использовали аутентификацию куки), но когда аутентификация пытается проверить текущего пользователя, оно обнаружит, что нет аутентифицированного пользователя, который не позволит клиенту получить доступ к странице.
рассмотрим следующие действия:
сначала в файле startup.cs добавьте политику cookie после добавления аутентификации (очевидно, порядок имеет значение) и установите схему аутентификации на аутентификацию куки, чтобы сообщить приложению использовать аутентификацию из куки. я обычно использую следующее:
//add authentication service with an encrypted cookie
services.AddAuthentication(options => {
options.DefaultScheme = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options => {
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.Cookie.Name = "ClientCookie";
});
рассмотрите возможность добавления функции входа в систему для аутентификации пользователя с правами администратора, чтобы приложение могло правильно аутентифицировать пользователя. я использую что-то вроде этого:
public class AuthController : Controller
{
private readonly string authScheme = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme;
[HttpPost("[action]")]
public IActionResult Login([FromBody]JObject body)
{
//Gets inputs from Request Body
string userName = body[UserModelConstants.Username].ToString();
string password = body[UserModelConstants.Password].ToString();
//use the username and password to check if the user is ok or not
//then get his claim from database or fill them yourself but make sure to have a role type claim with the value "Administrator" for the admin user
List<Claim> claims = getUserClaims();
//now you have to create the user identity and principle
ClaimsIdentity CI = new ClaimsIdentity(claims, Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme,
ClaimTypes.Name, ClaimTypes.Role);
ClaimsPrincipal CP = new ClaimsPrincipal(CI);
return SignIn(CP, authScheme);//sign in the user so it can be checked when the user is being authorized to access the function.
}
это прекрасно работает для меня каждый раз, когда я создаю проект, но, возможно, вы захотите немного подстроить его по своему вкусу или, возможно, выбрать другие типы аутентификации.