Как проверить, есть ли у конкретного пользователя доступ к общей папке с помощью C#

У нас есть сценарий в нашем клиентском проекте, где клиентское приложение сохраняет и пытается извлечь файлы из общей папки, которая является виртуальной общей папкой. Но мы столкнулись с проблемами, когда конкретный идентификатор пользователя приложения терял доступ к этой общей папке. Поэтому нам нужна помощь в предварительной проверке наличия доступа к этому идентификатору пользователя в этой папке общего доступа. Так что подумайте о приложении, которое будет разработано на C# или vb.net для проверки доступа этого пользователя.

1 ответ

Я считаю, что лучше всего проверить разрешение, попробуйте получить доступ к каталогу (чтение / запись / список) и перехватить исключение UnauthorizedAccessException.

Если вы хотите проверить разрешения, следующий код должен удовлетворить ваши потребности. Вам нужно прочитать Access Rules для каталога.

private bool DirectoryCanListFiles(string folder)
{
    bool hasAccess = false;
    //Step 1. Get the userName for which, this app domain code has been executing
    string executingUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    NTAccount acc = new NTAccount(executingUser);
    SecurityIdentifier secId = acc.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;

    DirectorySecurity dirSec = Directory.GetAccessControl(folder);

    //Step 2. Get directory permission details for each user/group
    AuthorizationRuleCollection authRules = dirSec.GetAccessRules(true, true, typeof(SecurityIdentifier));                        

    foreach (FileSystemAccessRule ar in authRules)
    {
        if (secId.CompareTo(ar.IdentityReference as SecurityIdentifier) == 0)
        {
            var fileSystemRights = ar.FileSystemRights;
            Console.WriteLine(fileSystemRights);

            //Step 3. Check file system rights here, read / write as required
            if (fileSystemRights == FileSystemRights.Read ||
                fileSystemRights == FileSystemRights.ReadAndExecute ||
                fileSystemRights == FileSystemRights.ReadData ||
                fileSystemRights == FileSystemRights.ListDirectory)
            {
                hasAccess = true;
            }
        }
    }
    return hasAccess;
}
Другие вопросы по тегам