FreeTextbox in DotNetNuke / Images / Folders

Bei der Imagegallery der FreeTextBox innerhalb von DNN trat immer das Problem auf, dass Ordner ab der zweiten Ebene nicht mehr angezeigt wurden. Egal welche DNN - Berechtigungen gesetzt wurden, lediglich der Host konnte immer alle Ordner sehen.

Das Problem bzw. die Lösung ist ganz einfach:

In der Datenbank werden die Ordner so abgelegt "MeinOrdner/SubOrdner", bei der Überprüfung der Rechte wird aber "MeinOrdner\SubOrdner" übergeben. Dadurch wird natürlich keine Berechtigung gefunden und die Ordner werden nicht angezeigt.

Eine Zeile Code im Projekt "Provider.Ftb3HtmlEditorProvider" ist nötig und schon läuft es wieder. Öffnen der Datei "ftb.imagegallery.aspx.vb" und die Funktion "Page_PreRender" eine Zeile Code einfügen:

strDirectory = strDirectory.Replace("\", "/")

 

Die komplette Funktion sieht dann so aus:

 

Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender

' Obtain PortalSettings from Current Context
Dim _portalSettings As PortalSettings = CType(Context.Items("PortalSettings"), PortalSettings)

'Get the list of sub-directories
Dim strDirectories As String() = System.IO.Directory.GetDirectories(Server.MapPath(imgGallery.CurrentImagesFolder), "*")
Dim alDirectories As ArrayList = New ArrayList
Dim strDirectory As String
Dim roles As String
Dim i As Integer
Dim s As String

'Parse directories (only adding those we have permission for
For i = 0 To strDirectories.Length - 1

   If PortalSettings.ActiveTab.ParentId = PortalSettings.SuperTabId Then
      strDirectory = strDirectories(i).Substring(Common.Globals.HostMapPath.Length)
   Else
      strDirectory = strDirectories(i).Substring(PortalSettings.HomeDirectoryMapPath.Length)
   End If

   'DANFIX 
   strDirectory = strDirectory.Replace("\", "/")

   roles = FileSystemUtils.GetRoles(strDirectory, _portalSettings.PortalId, "READ")

   If PortalSecurity.IsInRoles(roles) Then
      
alDirectories.Add(strDirectory)
   End If

Next

imgGallery.CurrentDirectories = CType(alDirectories.ToArray(GetType(System.String)), String())

End Sub

Kommentar schreiben