Domanda

So che il soggetto potrebbe essere un po 'strano, ma non ero sicuro di come descrivere esattamente il mio obiettivo

Sto cercando di fare alcune autorizzazioni basate ruolo in un sistema di gestione dei contenuti. Il modo migliore che posso pensare di farlo è quello di tirare l'elenco dei ruoli dal database e metterli in una CheckBoxList. Da lì, salvo una stringa separati da virgola dei valori entrati in dettagli della pagina del database. Infine quando la pagina è tirato indietro, ho verificare se l'utente corrente ha permesso di tirare verso il basso la stringa separati da virgola e dividendolo in una stringa () e ciclo attraverso i valori.

La preoccupazione che ho è che quando il ciclo nell'insieme CheckBoxList e convertire i valori in una stringa, il metodo ciclo aggiunge una virgola alla fine della stringa ... Allora devo striscia la virgola prima di salvare al banca dati.

La mia domanda è: esiste un modo migliore di fare questo in modo che io non devo tornare nella stringa e striscia la virgola finale prima di salvare?

    ''# 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
È stato utile?

Soluzione

Mettere tutti i valori di una lista di stringhe, quindi utilizzare String.Join per concatenare loro. Non voglio commentare su come mantenere un elenco separato da virgole, piuttosto che una relazione uno-a-molti degli utenti ai ruoli. : -)

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

Altri suggerimenti

Potrebbe forse semplicemente avere una tabella di database che contiene un riferimento alla pagina (che sia per nome, percorso, o qualche altro ID univoco), ed un riferimento al ruolo?

Sono certamente non dicendo che questa è la soluzione migliore (con qualsiasi mezzo), è semplicemente un esempio:

Tabella Ruolo:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Pagina Tabella:

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

PageRole Tabella:

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

Si potrebbe quindi memorizzare i dati nella tabella di entrare, e quando si accede alla pagina di tirare indietro i vostri ruoli in base alla pagina corrente. Naturalmente, non è necessario sulla base della pagina a tutti, si può solo sostituire facilmente pagina nel mio esempio con permesso.

Se si utilizza l'appartenenza ASP.NET, è possibile assegnare più ruoli a un utente.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Solo una cosa da prendere in considerazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top