Проверка прав доступа к общей папке для текущего пользователя - PullRequest
0 голосов
/ 12 августа 2011

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

DirectorySecurity shareSecurity = new DirectoryInfo(this.GetFileServerRootPath).GetAccessControl();

foreach (FileSystemAccessRule fsRule in shareSecurity.GetAccessRules(true, true, typeof(NTAccount)))
{
    // check write permission for current user
    if (AccessControlType.Allow == fsRule.AccessControlType &&
            FileSystemRights.Write == (fsRule.FileSystemRights & FileSystemRights.Write))
    {
        if (null != fsRule.IdentityReference &&
            fsRule.IdentityReference.Value == WindowsIdentity.GetCurrent().Name)
        {
            return true;
        }
    }
}
return false;

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

Я не хочу проверять разрешения путем записи файла и определять права доступа для записи.

есть ли способ найти текущего пользователя в IdentityReference.Value?или предложения по преодолению этой проблемы?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Это может работать для вас:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, this.GetFileServerRootPath);

try
{
    writePermission.Demand();
    return true;
}
catch (SecurityException s)
{
    return false;
}

Просто любопытно - почему бы просто не попробовать / перехватить операцию записи?

0 голосов
/ 12 августа 2011

Может быть, вам следует использовать DirectoryInfo в этом каталоге для получения политик безопасности.

...