Установить разрешения для каталога и дочерних элементов
Моя программа для копирования некоторых каталогов, с подкаталогами и файлами с сервера на локальный компьютер. Мне нужно, чтобы каждый локальный пользователь мог его изменить (отредактировать / удалить / удалить / переименовать). Но теперь это может сделать только владелец. Как я могу установить необходимые разрешения для скопированного каталога и его дочерних элементов? Я пытаюсь такой код:
String account = Path.Combine(Environment.MachineName, "Users");
FileSystemRights rights = FileSystemRights.FullControl;
AccessControlType controlType = AccessControlType.Allow;
DirectorySecurity security = local_commonDir.GetAccessControl(AccessControlSections.Access);
FileSystemAccessRule rule = new FileSystemAccessRule(account, rights, controlType);
security.AddAccessRule(rule);
local_commonDir.SetAccessControl(security);
Но я получил исключение:
Некоторые или ссылки на свойства не могут быть преобразованы.
Если я добавлю отсутствующие элементы управления доступом, то ошибок нет. Я думаю, что получаю ошибку, потому что "Пользователи" уже существуют. Как мне изменить существующие права?
1 ответ
Решение
Я нашел решение:
WindowsIdentity id = WindowsIdentity.GetCurrent();
var sid = new SecurityIdentifier(WellKnownSidType.AccountDomainUsersSid, id.User.AccountDomainSid);
var security = dir.GetAccessControl();
var rule = new FileSystemAccessRule(sid,
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
security.AddAccessRule(rule);
dir.SetAccessControl(security);