質問

いなどをサポート(VB2008年)に基づくアプリの開発をしてい、使いたいカスタムの役割のユーザーがアクセスする

応用レイアウト: 私のメインフォームが開いたら、ログインした場合に、一定の行為が発生します。ログインフォームのインターンを使用して認証クラス感を作成し、認証ユーザーのアクセス権である。私の用途に設定ページ、認証モード設定アプリケーションを定義で使用できませんWindows認証環境でこのまま展開されます。

を利用して、MS SQL2005年dbの3テーブルを使用している認証プロセスのUser_Account,User_RolesとUser_Accessます。の組み合わせにはアカウントのUser_Accountの役割のUser_Rolesテーブルに拠点をUser_Accessます。のUser_Accessテーブルなどの見譲渡へのアクセスの様々な機能をアプリ内

認証方法: ユーザーを認証するため、私が使っているのMy.ユーザーです。CurrentPrincipal"(コード下記方法です。を意味しますユーザオブジェクト作品や機能の利用"My.ユーザーです。Name"プロパティのアプリ参照する場合には現在の認証されたユーザーです。

アクセス方法: を設定するために、現在のユーザーのアクセスレベルを使用してい機能内に認証クラスは、通過するユーザーです。名として可変となります。この機能を使用しデータセットテーブルアダプタおよび選択の場合計算書中のForループに割り当てすべてのアクセスレベルのユーザーの割付け機能コード。

私の問題: この方法を提供するためのアクセス権限をユーザーはいない永続的なアプリケーションを通じて全てのとしていますユーザオブジェクトです。いて教えてください方法をカスタムの役割を通じてのMy.ユーザオブジェクトを使用できます。IsInRole物件です。いてこれらの役割を動的に使用して作成しっUser_Rolesます。ることができるようになるのカスタムの役割使用するマーを使ってアプリケーションをMy.ユーザーです。IsInRole("MyRole")書式]...同様のどのように私は現在利用できる。ユーザーです。の名前です。残念ながらの役割できます現在の検証に対してのWindowsのタイプ座Adminisrator...パークがあります。).

していた多くの情報と例に関しASP.Net どの設定をサポート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
役に立ちましたか?

解決

私はあなたのSQLテーブルにアクセスするカスタムIPrincipalオブジェクトを実装する必要があると思います。 こののページを試してみてください。

編集ます:

まず、の定義を見てみましょうIIdentity IPrincipal に。あなたはIIdentityは、「役割」プロパティが定義されていないことに注意しましょう。彼らは、IIdentity(SampleIIdentity)のその実施に役割と呼ばれる追加のプロパティを実装するために選択したと、彼らはIPrincipalの彼らの実装から、それを使用しました。私は何を示唆していますことは、あなたが自分自身を定義するロールタイプの独自の役割(既存のテーブルを照会)プロパティを返す1(または配列)を実装することです。その後、IPrincipalの実装では、新しい役割のプロパティを照会するIsInRoleをコーディングすることができます。うまくいけば、それは私のかなり露出度の高い答えそれより理にかなっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top