File Explorer Dynamic path Issue in IIS

4 posts, 0 answers
  1. Anto (DLL Version : 2008.3.1314.35)
    Anto (DLL Version : 2008.3.1314.35) avatar
    212 posts
    Member since:
    Mar 2009

    Posted 28 Nov 2011 Link to this post

    Hi Everybody,

    I have downloaded the latest version(2011.2.915.35) trial of telerik.

    I have an file explorer control in my page in which i need to show folders in user basis,
    some folders are common to all users and some are specific to users.

    for example :

    Users : USER-A, USER-B,

    Common folders : ComFolder1,ComFolder2,ComFolder3.

    User Specific folders:
    FolderUser1--> for  USER-A alone
    FolderUser2--> for USER-B alone

    But all the folders (ComFolder1,ComFolder2,ComFolder3,FolderUser1,FolderUser2) resides in a common root folder called Fileexploredocs/documents.

    My requirement is

    When USER-A logs in i should show(ComFolder1,ComFolder2,ComFolder3,FolderUser1)
    When USER-B logs in i should show(ComFolder1,ComFolder2,ComFolder3,FolderUser2)

    For this i used the following class and function:

    public partial class _Default : System.Web.UI.Page<br>{<br>protected void
    Page_Load(object sender, EventArgs
    e)<br>{<br>RadFileExplorer1.Configuration.ContentProviderTypeName =
    typeof(CustomProvider).AssemblyQualifiedName;<br>}<br><br>public class
    CustomProvider : FileSystemContentProvider<br>{<br>public
    CustomProvider(HttpContext context, string[] searchPatterns, string[] viewPaths,
    string[] uploadPaths, string[] deletePaths, string selectedUrl, string
    selectedItemTag)<br>: base(context, searchPatterns, viewPaths, uploadPaths,
    deletePaths, selectedUrl, selectedItemTag)<br>{ }<br><br>public override
    DirectoryItem ResolveDirectory(string path)<br>{<br>DirectoryItem originalFolder
    = base.ResolveDirectory(path);<br>FileItem[] originalFiles =
    originalFolder.Files;<br>List<FileItem> filteredFiles = new
    List<FileItem>();<br><br>// Filter the files<br>foreach (FileItem
    originalFile in originalFiles)<br>{<br>if
    (!this.IsFiltered(originalFile.Name))<br>{<br>filteredFiles.Add(originalFile);<br>}<br>}<br><br>DirectoryItem
    newFolder = new DirectoryItem(originalFolder.Name, originalFolder.Location,
    originalFolder.FullPath, originalFolder.Tag, originalFolder.Permissions,
    filteredFiles.ToArray(), originalFolder.Directories);<br><br>return
    newFolder;<br>}<br><br>public override DirectoryItem
    ResolveRootDirectoryAsTree(string path)<br>{<br>DirectoryItem originalFolder =
    base.ResolveRootDirectoryAsTree(path);<br>DirectoryItem[] originalDirectories =
    originalFolder.Directories;<br>List<DirectoryItem> filteredDirectories =
    new List<DirectoryItem>();<br><br>// Filter the folders<br>foreach
    (DirectoryItem originalDir in originalDirectories)<br>{<br>if
    (!this.IsFiltered(originalDir.Name))<br>{<br>filteredDirectories.Add(originalDir);<br>}<br>}<br>DirectoryItem
    newFolder = new DirectoryItem(originalFolder.Name, originalFolder.Location,
    originalFolder.FullPath, originalFolder.Tag, originalFolder.Permissions,
    originalFolder.Files, filteredDirectories.ToArray());<br><br>return
    newFolder;<br>}<br><br>private bool IsFiltered(string name)<br>{<br>if
    (name.ToLower().EndsWith(".sys") ||
    name.ToLower().Contains("_sys"))<br>{<br>return true;<br>}<br><br>//
    else<br>return false;<br>}<br>}<br>}<br>

    It worked fine for me when i run it in my local machine, i thought of testing it in a server and deployed it in a windows webserver with II7, 
    its not working.

    I tried debugging the application in visual studio in the same server, its working fine when i run it locally in the server, it is not working when i host it in IIS.

    Anyone please give me some suggestions.

    Thank You,
  2. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 29 Nov 2011 Link to this post

    Hi Anto,

    I am not quite sure why this is not working on your side. I have tested the provided sample code on IIS7 and it was working as expected. Nevertheless, the filtering applied in the code is according to the file / folder name. In order to apply folder filtering according to the logged user you will have to modify the IsFiltered() method to fulfill the requirements.

    However, for the described folder structure I would recommend you instead of overriding the methods of the content provider, to simply set the folders that the user can access to the ViewPaths/UploadPaths/DeletePaths properties, e.g.:
    protected void Page_Load(object sender, EventArgs e)
    {
        List<string> paths = new List<string>() { "~/Fileexploredocs/documents/CommonFolder1", "~/Fileexploredocs/documents/CommonFolder2", "~/Fileexploredocs/documents/CommonFolder3" };
     
        if (User1)
            paths.Add("~/Fileexploredocs/documents/User1Folder");
        if (User2)
            paths.Add("~/Fileexploredocs/documents/User2Folder");
     
        RadFileExplorer1.Configuration.ViewPaths = paths.ToArray();
        RadFileExplorer1.Configuration.DeletePaths = paths.ToArray();
        RadFileExplorer1.Configuration.UploadPaths = paths.ToArray();
    }


    All the best,
    Dobromir
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Anto (DLL Version : 2008.3.1314.35)
    Anto (DLL Version : 2008.3.1314.35) avatar
    212 posts
    Member since:
    Mar 2009

    Posted 29 Nov 2011 Link to this post

    Hi Dobromir,

    Thank you for the reply.

    Will try your solution and will update you.

    I fixed it in another way,  i resolved it in another way,

    I checked the path i am referring, its getting different when i run the application in local and when i run it in IIS the path is different,
    i used the path that is checked while running in IIS.

    I checked the following function to sort out the issue,

    private bool IsFiltered(string name)
    {
        if
    (name.ToLower().EndsWith(".sys") ||
    name.ToLower().Contains("_sys"))
        {
            checked the FullPath varible at this place in both local version and IIS version,
            it helped me
            return true;
        }
        else
            return false;
    }

    Your method seems to be very simple and efficient, definitely going to try that now and will update you.

    Thank You,
  5. Anto (DLL Version : 2008.3.1314.35)
    Anto (DLL Version : 2008.3.1314.35) avatar
    212 posts
    Member since:
    Mar 2009

    Posted 05 Dec 2011 Link to this post

    Hi Everybody,

        Is there an option to set folder delete permissions,
        consider the above sample case,
        I don't want to allow delete of the default folders and other folders can be deleted.

        Anyone please give me a suggestion.

    Thank You
Back to Top