Веб-формы с удостоверением личности, необходимо повторить роли пользователя

#asp.net #webforms #asp.net-identity

Вопрос:

Используя веб-формы и удостоверение с vs2019, как мне повторить роли текущего пользователя, вошедшего в систему? Предпочтительно в vb, так как я нахожу конвертеры c# в vb, которые нужно нажимать и пропускать. Это очень простой тестовый проект, созданный с использованием «Отдельных учетных записей пользователей». В таблице претензий нет претензий (какими бы они ни были).

Ответ №1:

Ну, это очень тривиально-получать роли.

Вы можете сделать это:

 Dim MyRoles As New List(Of String)   MyRoles = Roles.GetRolesForUser().ToList  

Однако ОГРОМНАЯ, ОГРОМНАЯ, ОЧЕНЬ БОЛЬШАЯ разница здесь в том, что получение ролей пользователей тривиально?

Настройка ролей и реализация ролей? Ну, теперь это ОГРОМНАЯ, ОГРОМНАЯ, БОЛЬШАЯ, БОЛЬШАЯ ТРУДНАЯ часть.

Если у вас есть роли для идентификации, которые действительно работают? Тогда золотая олимпийская медаль почета за все ваши огромные усилия и труд может и должна быть присуждена вам!

С другой стороны, если вас интересует, как реализовать роли для идентификации? Что ж, тогда у нас есть огромный, огромный, невероятный другой вопрос.

Вы всегда можете проверить/просмотреть таблицу sql и посмотреть, существуют ли роли, а в таблице AspNetUserRoles есть значения.

Однако, если в этой таблице нет ролей и у вас нет реализованных ролей, то вам предстоит решить ГОРАЗДО более масштабную и сложную проблему. Итак, предполагая, что у вас есть настроенные и реализованные роли? Тогда ваш вопрос прост и тривиален.

И вы можете запросить таблицу AspNetUserLogons и присоединить ее к роли AspNetUserInRoles, которые, в свою очередь, могут быть присоединены к таблице ролей следующим образом:

введите описание изображения здесь

Поэтому добавьте элемент управления видом сетки, подобный этому:

 <asp:GridView ID="GRolesThis" runat="server" CssClass="table" Width="300px">   </asp:GridView>  <br />  

и в коде иди:

 Dim strSQL As String   strSQL = "SELECT AspNetUsers.Email, AspNetRoles.Name " amp;  "FROM AspNetUsers " amp;  "LEFT JOIN AspNetUserRoles ON AspNetUsers.Id = AspNetUserRoles.UserId " amp;  "LEFT JOIN AspNetRoles ON AspNetRoles.Id = AspNetUserRoles.RoleId"   Using conn As New SqlConnection(My.Settings.WAuth)   Using cmdSQL As New SqlCommand(strSQL, conn)  conn.Open()  GRoles.DataSource = cmdSQL.ExecuteReader  GRoles.DataBind()  End Using   End Using  

и ты получишь это:

введите описание изображения здесь

Но, опять же, вышесказанное предполагает, что у вас есть роли и вы работаете.

С другой стороны, возможно, вы захотите спросить, как сначала заставить роли работать на идентификацию. Как только вы начнете работать с ролями, вышесказанное покажет, что это легко, но я держу пари, что ваш РЕАЛЬНЫЙ вопрос заключается не в том, как получить роли пользователей, а в том, как заставить роли работать.

Так как получить роли так просто?

Сомневаюсь, что это ваш настоящий вопрос. Но, предполагая, что у вас действительно есть Роли и они работают?

Тогда вышесказанное-ваш ответ.

Комментарии:

1. Идентичность, похоже, реализована, и это было не очень сложно. Я создал нового пользователя через веб-сайт, а затем добавил некоторые роли через ssms, а затем добавил записи о присоединении к роли AspNetUserRoles. Создал папку только для администратора, настроил ее web.config, чтобы разрешать только пользователям с ролями администратора, добавил страницу в корневой каталог для обычных пользователей, прошедших проверку подлинности, настроил веб-сайт web.config, чтобы разрешить его просмотр администратору и роли пользователя. Все это было проверено нормально. Тестирование сводилось к входу в систему от имени различных пользователей, чтобы узнать, могут ли они получить доступ к ожидаемым страницам.

2. Однако я все еще не могу получить доступ к ролям. Я попробовал более или менее то, что вы предложили, прежде чем я первоначально опубликовал. в главном файле web.config внутри system.web: <RoleManager включено=»true» />, а затем в коде по умолчанию.aspx: Выберите роли в качестве нового Списка(Строки) Роли = Роли. GetRolesForUser(). Внесите в список только для того, чтобы узнать, заполнен ли список. Это не удается с

3. Внутреннее исключение 1: Исключение HttpException: Не удается подключиться к базе данных SQL Server. Внутреннее исключение 2: Исключение SQLException: При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не был найден или был недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Сетевые интерфейсы SQL, ошибка: 26 — Указана ошибка Определения местоположения Сервера/Экземпляра)

4. Может быть, тег менеджера ролей неверен? Я могу получить доступ к базе данных; У меня есть сетка на главной странице, которая показывает результаты представления, в котором перечислены все пользователи и их роли.

Ответ №2:

Я думаю, что это решено — есть две части. Во-первых, тег rolemanager в web.config не нужен, и, вероятно, он мешает работе, это связано со старой структурой членства. Во-вторых, я разместил код для тестирования ролей на странице запуска default.aspx. Я знал, что в этот момент, до входа пользователя в систему, не будет никаких ролей, но не ожидал, что из-за этого код выйдет из строя. Перемещение кода на другую страницу показывает, что он работает.