Код C # для установки удаленного общего ресурса для наследования разрешений из его родительского каталога - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть две машины, назовем их клиент и сервер, в домене Windows. Сервер имеет общий каталог, к которому можно получить доступ с клиентского компьютера. Я хочу запустить приложение C # на клиенте, которое устанавливает разрешение для этого общего ресурса, чтобы наследовать разрешения родительского каталога общего ресурса на сервере. Как мне это сделать?

Я пробовал код в следующих строках, но я не думаю, что он дает правильный эффект:

DirectoryInfo shareDirectoryInfo = new DirectoryInfo("\\server\share");
DirectorySecurity directorySecurity = shareDirectoryInfo.GetAccessControl();
directorySecurity.SetAccessRuleProtection(false, false);
InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
FileSystemAccessRule accessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow);
bool modified;
directorySecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out modified);
if (modified)
{
    Directory.SetAccessControl(name, directorySecurity);
}

Наверное, я не понимаю, почему я должен создать FileSystemAccessRule для каталога - как я могу просто сказать, что унаследован от родителя?

Спасибо за любую помощь! Martin

1 Ответ

5 голосов
/ 07 марта 2012

Вы можете установить папку, чтобы наследовать от родителя, используя SetAccessRuleProtection

DirectoryInfo targetFolder = new DirectoryInfo(@"\\server\share");
DirectorySecurity folderSecurity = targetFolder.GetAccessControl();   // Existing security
folderSecurity.SetAccessRuleProtection(false, true);                // This sets the folder to inherit
targetFolder.SetAccessControl(folderSecurity);

РЕДАКТИРОВАТЬ: документ msdn объясняет, что если false отправляется в качестве первого аргумента, то второй аргументигнорируется

...