Как распространить изменения администратора на претензии пользователя
ситуация
Допустим, администратор сайта удаляет пользователя из роли администратора и добавляет его в роль участника. Согласно базе данных сайта, этот пользователь был понижен в должности и больше не должен иметь доступа к функциям только администратора. Теперь пользователь возвращается на сайт через некоторое время после этого изменения, но вошел в систему за некоторое время до изменения и все еще вошел в систему. До тех пор, пока этот пользователь не выйдет из системы, у него останутся претензии, которые говорят, что он находится в Административная роль. Если она выходит из системы или выходит из системы, она теряет утверждение о том, что принадлежит к роли администратора, и при повторном входе получает новое заявление о принадлежности к роли участника.
Желание
Я бы хотел, чтобы в следующий раз, когда пользователь запросил страницу с сайта после того, как администратор внес изменение, пользователь должен прозрачно потерять заявку на роль администратора и получить заявку на роль участника без необходимости выходить из нее или делать это. что-нибудь особенное. На самом деле, я бы предпочел, чтобы они не знали об изменениях, за исключением того, что ее меню немного изменилось, потому что она больше не может выполнять действия только для администратора.
Как бы вы справились с этой ситуацией так, чтобы невидимый для пользователя?
Мои мысли
Я использую ASP.NET MVC 5 и ASP.NET Identity, но кажется, что решение этого может быть легко обобщено для других платформ, основанных на утверждениях, которые используют куки. Я полагаю, что ASP.NET Identity хранит утверждения в файлах cookie пользователя по умолчанию в приложениях MVC 5.
Я прочитал следующий пост вместе со многими другими на SO, и он ближе всего подходит к ответу на этот вопрос, но он касается только случая, когда пользователь обновляет себя, а не когда кто-то, например администратор, вносит изменения в свою учетную запись: MVC 5 текущие утверждения авторизация и обновление заявок
1 ответ
В Identity 2.0 есть функция, которая решает эту проблему, в основном вы сможете сделать что-то вроде этого, добавив проверку на уровне файлов cookie, которая будет отклонять пользователей, чьи учетные данные изменились, поэтому они вынуждены повторно регистрировать / получать новый файл cookie. Удаление роли должно инициировать эту проверку (обратите внимание, что проверка выполняется только после прохождения validationInterval, поэтому файл cookie все еще будет действителен в течение этого меньшего промежутка времени.
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider {
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});