Frage

Ich weiß

Ich versuche einige rollenbasierte Berechtigungen in einem Content -Management -System zu erfüllen. Der beste Weg, das ich mir vorstellen kann, besteht darin, die Liste der Rollen aus der Datenbank zu ziehen und sie in eine Kontrollliste zu platzieren. Von dort speichere ich eine von der Kommas getrennte Zeichenfolge der geprüften Werte in den Seitendetails der Datenbank. Wenn die Seite zurückgezogen wird, überprüfe ich schließlich, ob der aktuelle Benutzer die Berechtigung hat, indem er die von Kommas getrennte Zeichenfolge herunterzieht und in eine String () () aufteilt und die Werte durchschleifen.

Das Problem, das ich habe, ist, dass die Schleifenmethode, wenn ich die Checkboxlist durchschließe und die Werte in eine Zeichenfolge umwandelte, ein Komma zum Ende der Zeichenfolge hinzufügt. Ich muss das Komma dann ausziehen, bevor ich es in der Datenbank speichere.

Meine Frage ist, gibt es eine bessere Möglichkeit, dies zu tun, damit ich nicht in die Saite zurückkehren und das nachverfolgende Komma entfernen muss, bevor ich spart?

    ''# 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
War es hilfreich?

Lösung

Geben Sie alle Werte in eine Liste von Zeichenfolgen ein und verwenden Sie dann String.join, um sie zu verkettet. Ich werde mich nicht zur Aufbewahrung einer von Kommas getrennten Liste als ein Eins-zu-viele-Verhältnis von Benutzern zu Rollen äußern. :-)

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() )

Andere Tipps

Könnten Sie vielleicht einfach eine Datenbanktabelle haben, die einen Verweis auf die Seite (sei es mit Namen, Pfad oder einer anderen eindeutigen ID) und einen Verweis auf die Rolle?

Ich sage sicher nicht, dass dies die beste Lösung ist (auf jeden Fall), es ist einfach ein Beispiel:

Rollentabelle:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Seitentabelle:

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

Pagerole Tabelle:

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

Sie würden Ihre Daten dann in der Verbindungstabelle speichern und beim Zugriff auf die Seite Ihre Rollen basierend auf der aktuellen Seite zurückziehen. Natürlich muss es überhaupt nicht auf der Seite basieren, Sie könnten die Seite in meinem Beispiel genauso leicht ersetzen.

Wenn Sie eine ASP.NET -Mitgliedschaft verwenden, können Sie einem Benutzer mehrere Rollen zuweisen.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Nur etwas zu beachten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top