Question

Je sais que le sujet est peut-être un peu étrange, mais je ne savais pas comment décrire exactement mon objectif

Je suis en train de faire des autorisations à base de rôle dans un système de gestion de contenu. La meilleure façon que je peux penser à faire est de tirer la liste des rôles de la base de données et les placer dans un CheckBoxList. A partir de là, je sauve une chaîne des valeurs vérifiées séparées par des virgules dans les détails de la page de la base de données. Enfin, lorsque la page est tiré vers l'arrière, je vérifier si l'utilisateur a la permission en tirant la chaîne séparées par des virgules et le diviser en une chaîne () et boucle à travers les valeurs.

Ce qui me préoccupe est que lorsque je boucle à travers le CheckBoxList et convertir les valeurs à une chaîne, la méthode de boucle ajoute une virgule à la fin de la chaîne ... Je dois ensuite dépouiller la virgule avant de l'enregistrer à la base de données.

Ma question est, est-il une meilleure façon de le faire pour que je ne dois pas revenir dans la chaîne et la bande la virgule finale avant d'enregistrer?

    ''# 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
Était-ce utile?

La solution

Mettez toutes les valeurs dans une liste de chaînes, puis utilisez String.Join pour les concaténer. Je ne vais pas commenter garder une liste séparée par des virgules plutôt qu'un à-plusieurs des utilisateurs à des rôles. : -)

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

Autres conseils

Pourriez-vous avoir peut-être simplement une table de base de données qui contient une référence à la page (que ce soit par nom, le chemin, ou un autre identifiant unique), et une référence au rôle?

Je ne vais certainement pas dire que c'est la meilleure solution (par tout moyen), il est tout simplement un exemple:

Tableau Rôle:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Page Tableau:

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

PageRole Tableau:

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

Vous pouvez ensuite stocker vos données dans le tableau d'assemblage, et lorsque vous accédez à la page tirez vos rôles en fonction de la page en cours. Bien sûr, il ne doit pas en fonction de la page du tout, vous pouvez simplement remplacer aussi facilement la page dans mon exemple avec la permission.

Si vous utilisez l'adhésion de ASP.NET, vous pouvez attribuer plusieurs rôles à un utilisateur.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Juste quelque chose à considérer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top