D
I got it. Now the work code looks like:#!/usr/bin/env python3
import win32security
import ntsecuritycon as con
target_folder = "D:\Test"
access_dict = {
'Group1': 'R',
'Group2': 'W',
'Group3': 'R',
'Group4': 'W',
'Group5': 'R',
'Group6': 'R',
'СИСТЕМА': 'F',
'Администраторы': 'F',
'User': 'F',
'ВСЕ':'R'
}
# === ACCESS CONSTANTS ===
read_only = 1179817 # маска: чтение и выполнение
write_access = 1245631 # маска: запись и изменение
full_access = 2032127 # маска: полный доступ
flags = win32security.OBJECT_INHERIT_ACE|win32security.CONTAINER_INHERIT_ACE
sd = win32security.GetNamedSecurityInfo(
target_folder,
win32security.SE_FILE_OBJECT,
win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()
ace_count = dacl.GetAceCount()
for i in range(0, ace_count): # Удаляем все ACE
dacl.DeleteAce(0)
for userName, access in access_dict.items():
userx, domain, type = win32security.LookupAccountName("", userName)
if access == "R":
dacl.AddAccessAllowedAceEx(
win32security.ACL_REVISION_DS,
flags,
read_only,
userx) # Read only
if access == "W":
dacl.AddAccessAllowedAceEx(
win32security.ACL_REVISION_DS,
flags,
write_access,
userx) # Full control
if access == "F":
dacl.AddAccessAllowedAceEx(
win32security.ACL_REVISION_DS,
flags,
full_access,
userx) # Full control
win32security.SetNamedSecurityInfo(
target_folder,
win32security.SE_FILE_OBJECT,
win32security.DACL_SECURITY_INFORMATION,
None,
None,
dacl,
None)