Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
1

Windows-аутентификация/авторизация

06.08.2016, 23:46. Просмотров 2082. Ответов 9
Метки нет (Все метки)

Добрый день, форумчане.
Вопрос следующий.
Мне необходимо в разработанном приложении с windows-аутентификацией сделать разграничение прав доступа по ролям и пользователям.
Как ставить ограничения на просмотр страниц по ролям и пользователям мне понятно.

Вопрос.

Как сделать так чтобы при вводе логина и пароля пользователем открывалась именно та страница которая его правам соответствует. Допустим, при вводе логина и пароля администратора открывалась страница администратора, без пароля открывалась страница юзера, при вводе логина и пароля редактора открывалась страница именно редактора и т.д.?

Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2016, 23:46
Ответы с готовыми решениями:

Авторизация и аутентификация FormsAuthentication MVC
Очень нужна толковая инструкция по реализации доступа. На данный момент использую...

Авторизация на сайте с учетной записи windows
Для авторизации на сайте нужно использовать учетную запись windows. Как сделать чтобы доступ...

Mvc аутентификация
Доброго времени суток!!! Есть mvc проект version=3,используется аутентификация форм. Есть метод...

Аутентификация форм
Здравствуйте, имеется локальный проект на VS2015 pro + ASP.NET MVC 5, NET Framework 4.5.2, СУБД...

9
.NET C#,ASP.NET MVC
Эксперт .NET
579 / 492 / 223
Регистрация: 16.10.2010
Сообщений: 1,899
07.08.2016, 00:47 2
Лучший ответ Сообщение было отмечено Aleksey_FL как решение

Решение

В методе контроллера который проверяет пару логин-пароль при успешной авторизации сделайте проверку на роль\право доступа и с соответствующими редиректами
Чтото вроде этого

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[HttpPost]
public ActionResult Login(LoginViewModel model)
{
    ...
    //check credentials
    ...
   
    if(User.IsInRole("Administarotr")
    {
        return RedirectToAction("AdminPage", "YourController");
    }
    else if(User.IsInRole("Redactor")
    {
        return RedirectToAction("RedactorPage", "YourController");
    }
}
1
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
08.08.2016, 01:30  [ТС] 3
Большое спасибо, очень помогли!

Добавлено через 8 часов 16 минут
Возникла проблема. Роли для контроллеров указаны.
Но авторизация с учетом ролей не сработала.
В базе данных в таблице AspNetRols создал роли и прописал id пользователей из таблицы AspNetUsers.

Видимо надо было использовать какие-то дополнительные настройки для ролей и возможно в webconfig надо что-то прописать?!

Подскажите пожалуйста!

Добавлено через 19 минут
Проект создаю в Visual Studio 2015.
0
.NET C#,ASP.NET MVC
Эксперт .NET
579 / 492 / 223
Регистрация: 16.10.2010
Сообщений: 1,899
08.08.2016, 10:34 4
Асп создает пару своих ролей по умолчанию. Вы можете создавать роли к примеру в Startup через identity. Либо в методе Seed() конфигурации миграции через ваш контекст

Вот тут есть пример первого варианта.
https://code.msdn.microsoft.com/ASPNET-MVC-5-Security-And-44cbdb97
0
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
11.08.2016, 00:45  [ТС] 5
У меня еще вопрос.
А если я создаю роли в базе данных вручную и связываю их в таблице AspNetUserRoles с пользователями, по идее ниже прописанный пример должен работать, или что-то еще нужно сделать?
0
.NET C#,ASP.NET MVC
Эксперт .NET
579 / 492 / 223
Регистрация: 16.10.2010
Сообщений: 1,899
11.08.2016, 00:58 6
Да, можно и в ручную
0
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
11.08.2016, 01:16  [ТС] 7
То есть, если я пропишу ниже представленным образом, должно все работать без дополнительных настроек?
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
31
32
33
34
35
36
37
38
39
 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
 
            // Сбои при входе не приводят к блокированию учетной записи
            // Чтобы ошибки при вводе пароля инициировали блокирование учетной записи, замените на shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
 
            if(result == SignInStatus.Success)
            {
 
                if (User.IsInRole("Admin"))
                    {
                    return RedirectToAction("Index", "Home");
                }
                else if (User.IsInRole("Redactor"))
                {
                    return RedirectToAction("About", "Home");
                }
 
            }
 
            switch (result)
            {
                case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("", "Неудачная попытка входа.");
                    return View(model);
            }
        }
0
.NET C#,ASP.NET MVC
Эксперт .NET
579 / 492 / 223
Регистрация: 16.10.2010
Сообщений: 1,899
11.08.2016, 01:30 8
Да, только засуньте ваш кусок кода в блок switch. Либо уберите у него первую проверку. Ну и роли создайте соответствующие
0
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
11.08.2016, 01:31  [ТС] 9
Сейчас я прописал следующим образом - в Success, но User.IsInRole("Admin") и User.IsInRole("User") не находят ни роли Admin ни User, хотя в базе данных роли созданы и связаны с пользователями, в чем может быть проблема?

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
31
32
33
34
35
36
37
       public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
 
            // Сбои при входе не приводят к блокированию учетной записи
            // Чтобы ошибки при вводе пароля инициировали блокирование учетной записи, замените на shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
 
          
 
            switch (result)
            {
                case SignInStatus.Success:
                    {
                        if (User.IsInRole("Admin"))
                        {
                            return RedirectToAction("Index", "Home");
                        }
                        else if (User.IsInRole("User"))
                        {
                            return RedirectToAction("About", "Home");
                        }
                        return RedirectToAction("Contact", "Home");
                    }
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("", "Неудачная попытка входа.");
                    return View(model);
            }
        }
0
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 91
11.08.2016, 01:41  [ТС] 10
Таблицы в базе данных:
0
Миниатюры
Windows-аутентификация/авторизация  
Изображения
  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2016, 01:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не работает аутентификация
Доброго времени суток! Помогите пожалуйста разобраться. Вот методы контроллера public...

Внешняя аутентификация. Simplemembership или identity
Если используем в проекте simplemembership, то мы можем регистрировать нового пользователя, который...

JWT аутентификация ASP.NET Core
Здравствуйте. Кто-нибудь может рассказать, как сделать JWT-аутентификацию на сайте, работающем на...

Аутентификация приложения ASP.NET MVC
Добрый день! У меня есть проект на ASP.NET MVC 5 без аутентификации при создании. Добавила ее по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.