Флажок в строку, сохранить в базу данных, затем преобразовать в массив - PullRequest
0 голосов
/ 10 февраля 2010

Я знаю, что предмет может быть немного странным, но я не был уверен, как точно описать мою цель

Я пытаюсь сделать некоторые разрешения на основе ролей в системе управления контентом. Лучший способ сделать это - вытащить список ролей из базы данных и поместить их в 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

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

Не могли бы вы просто иметь таблицу базы данных, которая содержит ссылку на страницу (будь то по имени, пути или некоторому другому уникальному идентификатору) и ссылку на роль?

Я, конечно, не говорю, что это лучшее решение (любым способом), это просто пример:

Таблица ролей:

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.

1 голос
/ 10 февраля 2010

Поместите все значения в список строк, затем используйте String.Join, чтобы объединить их. Я не буду комментировать ведение списка через запятую, а не отношения «один ко многим» между пользователями и ролями. : -)

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() )
0 голосов
/ 10 февраля 2010

Если вы используете членство в ASP.NET, вы можете назначить пользователю несколько ролей.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Просто кое-что рассмотреть.

...