checkboxList to String, 데이터베이스로 저장 한 다음 배열로 변환합니다.
-
19-09-2019 - |
문제
나는 주제가 조금 이상하다는 것을 알고 있지만 내 목표를 정확하게 설명하는 방법을 확신하지 못했습니다.
콘텐츠 관리 시스템에서 역할 기반 권한을 수행하려고합니다. 내가 생각할 수있는 가장 좋은 방법은 데이터베이스에서 역할 목록을 가져 와서 CheckboxList에 배치하는 것입니다. 거기에서 확인 된 값의 쉼표로 분리 된 문자열을 데이터베이스의 페이지 세부 사항에 저장합니다. 마지막으로 페이지가 다시 시작되면 현재 사용자가 쉼표로 분리 된 문자열을 끌어 내고 문자열 ()로 분할하여 값을 통해 루프를 통해 허가를받은 지 확인합니다.
내가 가지고있는 문제는 체크 박스리스트를 통해 루프하고 값을 문자열로 변환 할 때 루프 메소드가 문자열 끝에 쉼표를 추가한다는 것입니다 ... 그런 다음 데이터베이스에 저장하기 전에 쉼표를 벗겨야합니다.
내 질문은,이 작업을 수행하는 더 좋은 방법이있어서 줄을 세우고 저장하기 전에 후행 쉼표를 벗길 필요가 없습니까?
''# 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
해결책
모든 값을 문자열 목록에 넣은 다음 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() )
다른 팁
아마도 페이지에 대한 참조 (이름, 경로 또는 다른 고유 ID)와 역할에 대한 참조가 포함 된 데이터베이스 테이블을 가질 수 있습니까?
나는 이것이 최고의 솔루션이라고 말하는 것이 아니라 (어떤 식 으로든) 단순히 예입니다.
역할 테이블 :
RoleId | RoleName
_________________
1 | Editor
2 | Administrator
페이지 테이블 :
PageId | PageName
8 | ~/Page1.aspx
9 | ~/OtherPlace/Page2.aspx
호출기 테이블 :
RoleId | PageId
2 | 8
2 | 9
1 | 9
그런 다음 데이터를 결합 테이블에 저장하고 페이지에 액세스 할 때 현재 페이지를 기반으로 역할을 다시 가져옵니다. 물론 페이지를 기반으로 할 필요는 없으므로 내 예에서 페이지를 허가로 쉽게 바꿀 수 있습니다.
ASP.NET 멤버십을 사용하는 경우 사용자에게 여러 역할을 할당 할 수 있습니다.
Roles.AddUserToRoles(username, roles);
Roles.IsUserInRole(role);
고려해야 할 것이 있습니다.