powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Релогин аккаунта при выдачи роли или удалении пользователя
25 сообщений из 83, страница 2 из 4
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760554
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Не, ну сделать кнопку с редиректом не проблема, я просто делаю следующим образом:

Я (администратор) захожу в список пользователей, которые зарегистрированы на сервере. Второй браузер при этом авторизован простым пользователем без прав.
В списке пользователей выбираю нужного мне и нажимаю редактировать.
В редактировании выставляю чекбоксами роли, к которым привязаны какие-то разрешения и жму сохранить.
При сохранении отправляется Post запрос и пользователю в БД выдаются указанные роли.
Например я назначил ему роль администратора, как бы я не обновлял страницу пользователя пока он руками не нажмет "Logout (Выход)" и заново не войдёт, то он так и будет простым пользователем, а не админом, ну и наоборот.

Переходы (Redirect...) не сбрасывают текущую авторизацию пользователю и не загружают его обновленные данные.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760556
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

А про клики это просто просмотр кучи сайтов, где администрация мне давала/забирала права и при первом же F5 (обновлении страницы) я видел, что у меня все меняется
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760562
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skewПереходы (Redirect...) не сбрасывают текущую авторизацию пользователю и не загружают его обновленные данные.
Давай будем меньше рассуждать и больше делать.
Итак:
skewRedirectToActionPermament тоже делает переход только моего аккаунта,
как это понимать?
Если в контроллере ты должен выполнить функцию с редиректом только для того кого надо и кого поменял?
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760568
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

А как мне уквзать, что я должен сделать только этомк человеку у меня в функции
EditUser(AppIdentityUser user, string[] selectedRoles){
user.UpdateRoles(selectedRoles);
Session.Abord();
Session.Clear();
return RedirectToActionPermament("Login", "Account");
}

Код пишу с телефона по памяти, поэтому есть ошибки в синтаксисе но главное суть. Примерно так работает функция выбачи ролей. Как в ней сделать тогда переход для выбранного user ?
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760572
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
В MVC 5 нужно подумать. Вот так будет работать?
- добавить в User доп поле-флаг например IsChangeRoles и при серъёзной правке с перелогином взводить флаг
- в контроллере
var userId = User.Identity.GetUserId();
var currentUser = await UserManager.FindByIdAsync(userId);
проверяем флаг currentUser.IsChangeRoles
- после логина этот флаг сбрасываем
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760573
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо ещё проще - тут ты писал:
skewесли с пользователя проверять наличие прав, то они меняются,
т.е. инфа обновилась из базы при правке в другой сессии админом?
Если да, то тут же тот флаг рядом и будет.
Что это особо опасный преступник и его надо срочно на форму логин.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760575
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Так если задавать флаг, то придется при каждом запросе, который совершает пользователь его проверять, а это думаю не правильно, ведь каждый раз придется стучаться в бд. Удивительно что нету чего-то такого, SignInManager.SignOut(SelectedUser); и ведь сайт умеет это делать - очищать хранимые куки если SecurityStamp пользователя был изменен:

OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))

Но это в автоматическом режиме, а ручной я не нашел.

Petro123 т.е. инфа обновилась из базы при правке в другой сессии админом?
Да, если заходить этим пользователем в личный кабинет, где я сделал отображение имеющихся ролей, то да, там все изменяется моментально, что логично т.к. данные тянутся с базы, а вот авторизация висит в куках или кэше и ее как-то нужно почистить
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760604
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skewvalidateInterval: TimeSpan.FromMinutes(30),эта библиотека, а не сайт, лезет в базу каждые 30 мин.
А в ручном режиме ты сам через EF лезешь в базу.
Т.к. в базе данные меняются другим, то сама база не умеет сообщать коду наверху.
Приходится ждать F5 и запрашивать базу.
Тут выбирай.
Либо таймер жизни токена 20 минут, либо дольше, но сам лазишь в базу.
..
Делай вариант и не компасируй мозги.
Проверяй как решен вопрос в Core 2.1.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760627
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Так а что в базе мне менять? Роли успешно там меняются, но данные самой сессии ведь не в подключенной бд содержатся
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760631
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
У тебя код выше на редирект работает? Делает что нужно?
Значить вызвать его для того кого нужно.
Опять по кругу пошли?
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Роли меняются, но мы договорились что нужен перелогин.
Полная очистка всего что висит на юзвере.
Уволили его.
Значит нужно событие от библиотеки onChangeDB.
Я думаю такого нет и надо спрашивать бд.
Либо куки с жизнью 10 минут.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760641
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Так вот код, который я привел делает редирект моего аккаунта, а не редактированного, измененный аккаунт по прежнему как находился на открытой вкладке и как бы я его не обновлял на F5 никуда не переходит
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Редирект админа не должен быть, т.к.для него не нужно ничего вызывать.
Причина понятна?
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760674
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

все равно не совсем понимаю, из базы при помощи UserManager я могу достать IdentityUser по указанному id/почте. Но процедур, которые бы именно к найденному пользователю применили ряд мер по его дезавторизации я не нашел.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760678
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Мы код писать будем?
Или одни разговоры?
Не нашел юзверя текущего в GET запросе?
Показывай.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760683
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Тогда по порядку:

Класс пользователя, который использует UserManager.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 
  public class ApplicationUser : IdentityUser
    {
        public string Name { get; set; }
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            userIdentity.AddClaim(new Claim("Name", Name));
            return userIdentity;
        }
    }



Метод администратора, по выдачи роли:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
        [HttpPost]
        [ValidateAntiForgeryToken]
        [Authorize(Roles = "admin")]
        public async Task<ActionResult> EditAccount(ApplicationUser user, string[] selectedRoles)
        {
            try
            {
                if (user == null)
                    return HttpNotFound("Пользователь не найден");
               
                var selectedUser = await UserManager.FindByIdAsync(user.Id);
                if (selectedUser == null)
                    return HttpNotFound("Пользователь не найден");
            
                selectedUser.Email = user.Email;
                selectedUser.Name = user.Name;
                await UserManager.RemoveFromRolesAsync(selectedUser.Id, UserManager.GetRolesList().Select(s => s.Name).ToArray());
                await UserManager.AddToRolesAsync(selectedUser.Id, selectedRoles);
                await UserManager.UpdateAsync(selectedUser);
                
                TempData["StatusMessage"] = "Данные успешно обновлены";
            }
            catch {
                TempData["StatusMessage"] = "Что-то пошло не так, возникла ошибка при обновлении";}

            return RedirectToAction("AccountsList");
        }



При добавлении следующего кода в метод выдачи ролей ничего не меняется:
Код: c#
1.
2.
3.
4.
Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);



Как видим в методе EditAccount пользователю "selectedUser" обновляют все данные в БД.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Ты может прикалываешься тут на форуме?
Где код с Abandon?
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760695
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Я же написал, что при добавлении ничего не меняется. Или я его не так применяю ?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
        [HttpPost]
        [ValidateAntiForgeryToken]
        [Authorize(Roles = "admin")]
        public async Task<ActionResult> EditAccount(ApplicationUser user, string[] selectedRoles)
        {
            try
            {
                if (user == null)
                    return HttpNotFound("Пользователь не найден");
               
                var selectedUser = await UserManager.FindByIdAsync(user.Id);
                if (selectedUser == null)
                    return HttpNotFound("Пользователь не найден");
            
                selectedUser.Email = user.Email;
                selectedUser.Name = user.Name;
                await UserManager.RemoveFromRolesAsync(selectedUser.Id, UserManager.GetRolesList().Select(s => s.Name).ToArray());
                await UserManager.AddToRolesAsync(selectedUser.Id, selectedRoles);
                await UserManager.UpdateAsync(selectedUser);
                Session.Clear();
                Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
                TempData["StatusMessage"] = "Данные успешно обновлены";
            }
            catch {
                TempData["StatusMessage"] = "Что-то пошло не так, возникла ошибка при обновлении";}

            return RedirectToAction("AccountsList");
        }
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760705
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Не так. Надо в get.
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760748
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

перенес это в Get метод, но ничего не поменялось

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  [Authorize(Roles = "admin")]
        public async Task<ActionResult> AccountsList()
        {
            Session.Clear();
            Session.Abandon();
            Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
            Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
            return View(await UserManager.Users.ToListAsync());
        }
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760775
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
1. Не вижу что это Get
2. Добавить лог строку и показать тут
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760795
skew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        [HttpGet]
        [Authorize(Roles = "admin")]
        public async Task<ActionResult> AccountsList()
        {
            Session.Clear();
            Session.Abandon();
            Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
            Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
            return View(await UserManager.Users.ToListAsync());
        }



Добавил атрибут Get, а какую лог строку показать вам я не понял
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760805
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Что код реально вызывается. Первый раз замужем?
3. Где редирект
...
Рейтинг: 0 / 0
Релогин аккаунта при выдачи роли или удалении пользователя
    #39760817
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skew,
Вам наверно рано делать динамический интерфейс или выбрасывать на логин юзверя.
Сделайте просто сайт калькулятор сначала.
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 2 из 4
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Релогин аккаунта при выдачи роли или удалении пользователя
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]