C # File / Directory Permissions - PullRequest
       19

C # File / Directory Permissions

16 голосов
/ 10 января 2009

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

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

Я попробовал FileSystemRights.ListDirectory, но, похоже, (несмотря на документацию MS) для 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);
}

Спасибо.

- Джерри

Ответы [ 4 ]

7 голосов
/ 10 января 2009

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

Вы пробовали Traverse в отличие от ListDirectory?

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

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

3 голосов
/ 10 января 2009

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

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

1 голос
/ 10 января 2009

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

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

0 голосов
/ 01 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...