開発中のwinforms(VB 2008)ベースのアプリがあり、ユーザーアクセスにカスタムロールを使用したいと考えています。
アプリケーションレイアウト: 特定のアクションが発生したときにログインフォームを開くメインフォームがあります。ログインフォームのインターンは、私が作成した認証クラスを使用して、ユーザーを認証し、アクセス権を設定します。[アプリケーションの設定]ページで、[認証モード]を[アプリケーション定義]に設定しています。これは、これが展開される環境でWindows認証を使用できないためです。
アプリケーションはMSSQL2005 dbを使用し、認証プロセスで使用している3つのテーブルは、User_Account、User_Roles、およびUser_Accessテーブルです。User_Account内のアカウントとUser_Rolesテーブル内のロールの組み合わせは、User_Accessテーブルのベースです。User_Accessテーブルの使用は、アプリケーション内のさまざまな機能へのアクセスを割り当てる方法です。
認証方法: ユーザーを認証するために、「My.User.CurrentPrincipal」(以下のコード)方法を使用しています。My.Userオブジェクトはうまく機能し、現在認証されているユーザーを参照するときにアプリ全体で「My.User.Name」プロパティを使用できるようにします。
アクセス方法: 現在のユーザーのアクセスレベルを設定するために、Authenticationクラス内の関数を使用し、変数としてMy.User.Nameを渡します。この関数は、データセットテーブルアダプターとForループ内のSelect Caseステートメントを使用して、ユーザーにすべてのアクセスレベルを割り当てます(以下の関数コード)。
私の問題: ユーザーにアクセス権を割り当てるこの方法は機能しますが、My.Userオブジェクトのように、アプリケーション全体で永続的ではありません。.IsInRoleプロパティを使用してMy.Userオブジェクトを介してカスタムロールを作成する方法を見つけたいと思います。User_Rolesテーブルを使用してこれらのロールを動的に作成したいと思います。これにより、My.User.IsInRole( "MyRole")構文を使用して、アプリケーション全体でカスタムロールを使用できるようになります...現在My.User.Nameを使用できる方法と同様です。残念ながら、現在検証できる役割は、組み込みのWindowsタイプのアカウント(管理者... ect。)のみです。
ASP.Netに関連する多くの情報と例、およびWinforms 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