Я работаю над веб-приложением ASP.NET Core с MVC6. Я хочу реализовать режим обслуживания в своем веб-приложении, чтобы только определенный тип пользователей мог войти в веб-приложение, когда он находится в режиме обслуживания. Например, пользователю разрешен вход пользователя пользователя EXCEPT с ролью user
. Для достижения этой функциональности я пробовал использовать следующий код.Что касается режима обслуживания в ASP.NET Core
//Sign in user with provided username and password
var res = await _signInManager.PasswordSignInAsync(suser.UserName, user.Password, user.Remember, false);
if (res.Succeeded)
{
//check if web app is under maintenance mode and if it is, then check the role of the user
if (_env.IsEnvironment("Maintenance") && await _userManager.IsInRoleAsync(suser, "user"))
return View("Maintenance"); //if user is in 'user' role redirect to maintenance view
else
{
//else redirect to main page
}
}
Приведенный выше код выполняется, когда пользователь пытается войти в веб-приложение. Проблема с вышеуказанным кодом заключается в том, что он не будет работать, когда пользователь уже войдет в систему и попытается получить доступ к веб-приложению. в этом случае он будет перенаправлен на главную страницу веб-приложения независимо от режима обслуживания. Как Logout уже вошел в систему при попытке доступа к веб-приложению в режиме обслуживания?
Как использовать 'SignInManager' в пользовательском фильтре? –
Вам не нужен 'SignInManager', только' UserManager' - это то, что вам нужно проверить, является ли пользователь в роли или нет, и вы можете получить его из текущего 'OwinContext', если вы используете VS по умолчанию шаблон, он обычно регистрирует экземпляр 'UserManager' в' OwinContext', и вы можете получить его, используя следующий код: 'using Microsoft.AspNet.Identity.Owin; с использованием Microsoft.AspNet.Identity; var manager = HttpContext.Current.GetOwinContext(). GetUserManager>(); ' –
Что я хотел бы сделать в пользовательском фильтре, так это то, что сначала проверьте, находится ли веб-сайт в режиме обслуживания или нет (выполняется с использованием переменной окружения). затем проверьте, был ли пользователь уже зарегистрирован или нет. Если пользователь вошел в систему, а веб-сайт находится в режиме обслуживания, выйдите из него и перенаправите пользователя на страницу входа. После того, как пользователь выйдет из системы, и если пользователь попытается снова войти на веб-сайт в режиме обслуживания, тогда код, о котором я упоминал выше, обработает все остальное. –