Разрешения для файлов и каталогов С#
Я пишу приложение для управления доступом пользователей к файлам. Короткий вариант очень длинной истории - это то, что я должен использовать для этого каталог и файлы. Нет системы управления документами для нашего дешевого генерального директора...
В любом случае... У меня все работает, кроме случая, когда пользователь может просматривать, какие файлы находятся в каталоге, но на самом деле не видит содержимое файла. (В файлах могут быть чувствительные данные 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);
}
Спасибо.
- Джерри
Ответы
Ответ 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.