Подтвердить что ты не робот

Разрешения для файлов и каталогов С#

Я пишу приложение для управления доступом пользователей к файлам. Короткий вариант очень длинной истории - это то, что я должен использовать для этого каталог и файлы. Нет системы управления документами для нашего дешевого генерального директора...

В любом случае... У меня все работает, кроме случая, когда пользователь может просматривать, какие файлы находятся в каталоге, но на самом деле не видит содержимое файла. (В файлах могут быть чувствительные данные HR.)

Я попробовал FileSystemRights.ListDirectory, но, похоже, (dispify MS documentation) также установил ReadData в true. Я отключу ReadData (возможность читать файлы), и у меня внезапно нет доступа к каталогу. Эти два связаны.

Любые идеи, для которых разрешение установлено для достижения этого?

Мой текущий код:

SetSecurity(pth, usr, FileSystemRights.ListDirectory, AccessControlType.Allow);

...

public void SetSecurity(string dirName, string account,
    FileSystemRights rights, AccessControlType controlType)
{
    // Get a FileSecurity object that represents the
    // current security settings.
    DirectorySecurity dSecurity = Directory.GetAccessControl(dirName);

    dSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));

    // Set the new access settings.
    Directory.SetAccessControl(dirName, dSecurity);
}

Спасибо.

- Джерри

4b9b3361

Ответ 1

Перечисление FileSystemRights отображает как ReadData, так и ListDirectory значение 1, поэтому эти два эквивалента 100% по сравнению с .NET.

Вы пробовали Traverse, а не ListDirectory?

Изменить: на основе этой статьи в KB, похоже, что Windows XP считает их одинаковыми, только один относится только к файлам и применяется только к каталогам.

Изменить 2: Пока вы устанавливаете правило доступа ReadData/ListDirectory к НЕму наследуемому дочерним объектам, вы должны иметь возможность применить его к каталогу, не применяя его к файлам в каталоге. Класс FileSystemAccessRule поддерживает изменение флагов наследования.

Ответ 2

Файлы, вероятно, наследуют свойства безопасности от родителя.

Вы можете попросить DirectorySecurity.SetAccessRuleProtection(true, false) для предотвращения наследования файлов перед вызовом Directory.SetAccessControl();

Ответ 3

Угу. Траверс (я думаю, что он неверно назван) позволяет мне выполнять программу в папке, но НЕ просматривать содержимое папки. Не уверен, почему это полезно, если честно.

Я собираюсь сказать генеральному директору, что это невозможно сделать, и смотреть, как искры летят снова.: P

Ответ 4

Это значения наследования и распространения, которые не задаются при создании экземпляра FileSystemAccessRule.