#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. Я знал, что в этот момент, до входа пользователя в систему, не будет никаких ролей, но не ожидал, что из-за этого код выйдет из строя. Перемещение кода на другую страницу показывает, что он работает.