Pergunta

Eu sei que o assunto pode ser um pouco estranho, mas eu não tinha certeza de como descrever exatamente meu objetivo

Estou tentando fazer algumas permissões baseadas em função em um sistema de gerenciamento de conteúdo. A melhor maneira de pensar para fazer isso é puxar a lista de funções do banco de dados e colocá -las em uma lista de seleção. A partir daí, salvo uma sequência separada por vírgula dos valores verificados nos detalhes da página do banco de dados. Finalmente, quando a página é puxada de volta, verifico se o usuário atual tem permissão puxando a corda separada da vírgula e dividindo -a em uma string () e percorre os valores.

A preocupação que tenho é que, quando percorro a lista de seleção e converto os valores em uma string, o método loop adiciona uma vírgula ao final da string ... Eu então tenho que tirar a vírgula antes de salvá -la no banco de dados.

Minha pergunta é: existe uma maneira melhor de fazer isso para que eu não precise voltar para a corda e tirar a vírgula à direita antes de salvar?

    ''# 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
Foi útil?

Solução

Coloque todos os valores em uma lista de strings e use String.Join para concatená -los. Não vou comentar sobre como manter uma lista separada por vírgula, em vez de um relacionamento um para muitos dos usuários com funções. :-)

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

Outras dicas

Você talvez tenha simplesmente uma tabela de banco de dados que contém uma referência à página (seja por nome, caminho ou algum outro ID exclusivo) e uma referência à função?

Certamente não estou dizendo que esta é a melhor solução (por qualquer meio), é simplesmente um exemplo:

Tabela de papéis:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Tabela de página:

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

Tabela de Pagerole:

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

Você armazenaria seus dados na tabela de junção e, ao acessar a página, retire suas funções com base na página atual. Obviamente, ele não precisa com base na página, você pode substituir com a mesma facilidade no meu exemplo por permissão.

Se você usar a associação do ASP.NET, poderá atribuir várias funções a um usuário.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Apenas algo a considerar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top