У меня есть приложение winforms (VB 2008), которое я разрабатываю, и я хочу использовать пользовательские роли для доступа пользователей.Добавление пользовательских ролей - VB 2008 Winforms
Application Layout: У меня есть основная форма, которая открывает форму входа в систему, когда происходят определенные действия. Стажер формы входа в систему использует класс проверки подлинности, который я создал, для аутентификации пользователей и установки прав доступа. На моей странице настроек приложений у меня есть режим проверки подлинности, установленный на Application-defined, потому что я не могу использовать проверку подлинности Windows в среде, где это будет развернуто.
Приложение использует MS SQL 2005 db, а три таблицы, которые я использую в процессе аутентификации, - это таблицы User_Account, User_Roles и User_Access. Сочетание учетной записи в User_Account и ролей в таблице User_Roles является базой для таблицы User_Access. Используя таблицу user_access, как я назначить доступ к различным функциям в приложении
Метод проверки подлинности: Для аутентификации пользователя я использую «My.User.CurrentPrincipal» метод (код ниже). Объект My.User отлично работает и позволяет использовать свойство «My.User.Name» во всем приложении при обращении к текущему аутентифицированному пользователю.
метод доступа: Для того, чтобы установить текущие уровни пользователей доступа я использую функцию в своем классе аутентификации и проходящих в My.User.Name в качестве переменной. Функция использует адаптер таблицы набора данных и оператор Select Case внутри цикла For, чтобы назначить все уровни доступа для пользователя (код функции ниже).
Моя проблема: Этот метод назначения прав доступа к пользователю делает работу, но это не постоянны на протяжении применения в качестве объекта My.User есть. Я хотел бы найти способ создания пользовательских ролей через объект My.User, используя его свойство .IsInRole. Я хотел бы, чтобы эти роли динамически создавались с использованием моей таблицы User_Roles. Это позволит использовать пользовательские роли во всем моем приложении с использованием синтаксиса My.User.IsInRole (MyRole) ... аналогично тому, как я в настоящее время могу использовать My.User.Name. К сожалению, единственные роли, с которыми я могу сейчас проверить, - это встроенные учетные записи Windows (администратор ... ect.).
Я нашел много информации и примеров, связанных с ASP.Net, а также установил подлинность Windows Forms Windows, но до сих пор не имел прямого отношения к моей проблеме. Я думаю, что есть способ сделать это ... но я не смог его найти. Любая помощь будет принята с благодарностью!
Благодарим за помощь!
'пример аутентификации пользователя:
If Authenticate.CheckPassword(tbxUserName.Text, strPassword) Then
My.User.CurrentPrincipal = New GenericPrincipal(New GenericIdentity(tbxUserName.Text), Nothing)
' пример присвоения доступа:
Public Shared Function GetUser(ByVal strUsername As String) As Authenticate
Using UserAdapter As New dbUserTableAdapters.User_AccountsTableAdapter()
Dim UserTable As dbUser.User_AccountsDataTable = UserAdapter.GetByUser(strUsername)
Dim tempUser As New Authenticate() _
With {.ID = UserTable(0).id, _
.Username = UserTable(0).User_Name, _
.Password = UserTable(0).id}
Using AccessAdapter As New dbUserTableAdapters.User_AccessTableAdapter()
Dim AccessTable As dbUser.User_AccessDataTable = AccessAdapter.GetByUser(tempUser.ID)
For c As Integer = 0 To AccessTable.Rows.Count - 1
Select Case AccessTable(c).Role_Id
Case RoleType.SysAdmin
tempUser.AllowSysAdmin = True
Case RoleType.Maintenance
tempUser.AllowMaintenance = True
Case RoleType.ReportAll
tempUser.AllowRptAll = True
Case RoleType.ReportException
tempUser.AllowRptExceptions = True
Case RoleType.EventManagment
tempUser.AllowEventStart = True
Case Else
End Select
Next
Return tempUser
End Using
End Using
End Function
Возможно, это только я (очень возможно), но когда я просматриваю пример Microsoft, на который ссылается ваша ссылка, я могу получить доступ только к встроенным системным ролям (администратор, гость ... и т. Д.). Я могу настроить пользовательский пользователь и получить доступ к нему через свойство My.User.Name, но я не могу понять, как создавать и назначать пользовательские роли пользователю (кроме ролей на базе Windows) и использовать их с помощью My. Свойство User.IsInRole («MyCustomRole»). У вас бы не было предложений, которые могли бы привести меня к тому, что мне нужно. Спасибо! –
У меня нет доступа ко всему отсюда, и я работаю из памяти (что не так, как раньше), но я обновил свой ответ, основываясь на том, что я помню. – ssg31415926
Большое спасибо за обновленный ответ. Проект, над которым я работаю, является первым, с которым мне когда-либо приходилось использовать этот тип аутентификации, поэтому он занимает некоторое время для всех погружений (я могу быть немного толстым голосом). Позвольте мне немного поиграть в новую информацию, и я должен учесть ее с дополнительной информацией, которую вы предоставили. Еще раз спасибо! Я очень ценю, что вы нашли время, чтобы помочь. –