0

主題が少し奇妙かもしれないことは知っていますが、私の目標を正確に説明する方法がわかりませんでした

コンテンツ管理システムでロールベースの権限を実行しようとしています。これを行うために私が考えることができる最善の方法は、データベースからロールのリストを取得し、それらをCheckBoxListに配置することです。そこから、チェックした値のコンマ区切りの文字列をデータベースのページの詳細に保存します。最後に、ページがプルアップされたら、カンマ区切りの文字列をプルダウンしてString()に分割し、値をループして、現在のユーザーに権限があるかどうかを確認します。

私が懸念しているのは、CheckBoxListをループして値を文字列に変換すると、loopメソッドが文字列の最後にコンマを追加することです...次に、データベースに保存する前にコンマを削除する必要があります。

私の質問は、保存する前に文字列に戻って末尾のコンマを削除する必要がないように、これを行うためのより良い方法はありますか?

    ''# this is to get all selected items from
    ''# a checkboxlist and add it to a string
    ''# the reason for this is to insert the final string
    ''# into a database for future retrieval.
    Dim i As Integer
    Dim sb As StringBuilder = New StringBuilder()
    For i = 0 To CheckBoxList1.Items.Count - 1
        If CheckBoxList1.Items(i).Selected Then
            sb.Append(CheckBoxList1.Items(i).Value & ",")
        End If
    Next

    ''# now I want to save the string to the database
    ''# so I first have to strip the comma at the end
    Dim str As String = sb.ToString.Trim(",")
    ''# Then save str to the database

    ''# I have now retrieved the string from the 
    ''# database and I need to now add it to a One Dimensional String()
    Dim str_arr() As String = Split(str, ",")
    For Each s As String In str_arr
        ''# testing purposes only
        Response.Write(s & " -</br>")

        ''# If User.IsInRole(s) Then
        ''#     Do Stuff
        ''# End If
    Next
4

3 に答える 3

1

すべての値を文字列のリストに入れ、String.Join を使用してそれらを連結します。ユーザーとロールの 1 対多の関係ではなく、カンマ区切りのリストを維持することについてはコメントしません。:-)

Dim values as List(Of String) = New List(Of String)()
For i = 0 To CheckBoxList1.Items.Count - 1 
    If CheckBoxList1.Items(i).Selected Then 
        values.Add( CheckBoxList1.Items(i).Value )
    End If 
Next

Dim str As String = String.Join( ",", values.ToArray() )
于 2010-02-10T17:25:07.123 に答える
1

おそらく、ページへの参照 (名前、パス、またはその他の一意の ID) とロールへの参照を含むデータベース テーブルを用意できますか?

これが最善の解決策であると言っているわけではありません(決して)。これは単なる例です。

ロール テーブル:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

ページ テーブル:

PageId | PageName
8      | ~/Page1.aspx
9      | ~/OtherPlace/Page2.aspx

PageRole テーブル:

RoleId | PageId
2      | 8
2      | 9
1      | 9

次に、データを結合テーブルに保存し、ページにアクセスするときに、現在のページに基づいてロールを引き戻します。もちろん、ページに基づく必要はまったくありません。この例の Page を Permission に簡単に置き換えることができます。

于 2010-02-10T17:34:00.347 に答える
-1

ASP.NET メンバーシップを使用すると、ユーザーに複数の役割を割り当てることができます。

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

考慮すべきことだけです。

于 2010-02-10T17:28:58.817 に答える