Мое приложение VB.NET строит дерево каталогов с ограниченным доступом.
Доступ должен быть таким, чтобы обычный пользователь не мог удалить или переименовать существующее дерево. Но пользователь может добавлять новые файлы/папки в любом месте дерева. Пользовательский файл/папка должна быть полностью изменена любым пользователем.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы установить доступ, чтобы файлы/папки, созданные приложением, не могли быть изменены, но файлы/папки, созданные пользователями, могут быть изменены любым пользователем.
В настоящее время происходит правильное поведение файлов/папок, созданных приложением. Но когда пользователь создает свой собственный файл/папку, в разрешениях на этот файл/папку указывается только текущий пользователь. Таким образом, другие пользователи (или даже системные администраторы, существующие в файлах/папках, созданных приложением) не могут просматривать или изменять этот созданный пользователем файл/папку.
Текущий код: (когда пользователь сам создает файл/папку, этот код не предоставляет доступ к UserGroup или AdminGroup, только пользователю, который только что создал файл/папку)
FolderAcl.AddAccessRule(New FileSystemAccessRule(UserGroup,
FileSystemRights.ReadAndExecute,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.AddAccessRule(New FileSystemAccessRule(UserGroup,
FileSystemRights.Write,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.AddAccessRule(New FileSystemAccessRule(AdminGroup,
FileSystemRights.FullControl,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.SetAccessRuleProtection(True, False)
Другая попытка: (когда пользователь сам создает файл/папку, этот код дает доступ к UserGroup и AdminGroup, но не дает доступ пользователю. Пользователь находится в UserGroup, но UserGroup не у меня нет прав на удаление или изменение, поэтому, если пользователь создает файл/папку, он не может даже назвать его.)
' same code as above except...
InheritanceFlags.None ---> InheritanceFlags.Container or InheritanceFlags.Object
Я пробовал другие комбинации InheritanceFlags и PropagationFlags, но пока не повезло.
Любые идеи?
Спасибо, Майк.