Нужно на папку программно удалять разрешения определенного пользователя. Нашел пример на MSDN. Вот метод оттуда для удаления разрешений:
public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
DirectoryInfo dInfo = new DirectoryInfo(FileName);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
Rights,
ControlType));
dInfo.SetAccessControl(dSecurity);
}
Проблема в том, что он хоть и удаляет разрешения сам пользователь в списке контроля доступом остается. Только без разрешений. А мне нужно удалить его полностью. Как это сделать?
Ответ
Вот и решение:
DirectoryInfo dirInfo = new DirectoryInfo(path);
DirectorySecurity Rights = dirInfo.GetAccessControl(AccessControlSections.Access);
//Только для папок
Rights.RemoveAccessRuleAll(new FileSystemAccessRule(_user.Name,
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow));
//Только для файлов
Rights.RemoveAccessRuleAll(new FileSystemAccessRule(_user.Name,
FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow));
//Только для этой папки
Rights.RemoveAccessRuleAll(new FileSystemAccessRule(_user.Name,
FileSystemRights.FullControl,
InheritanceFlags.None,
PropagationFlags.InheritOnly,
AccessControlType.Allow));
dirInfo.SetAccessControl(Rights);
Комментариев нет:
Отправить комментарий