mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 20:31:35 +00:00
Added options mappermissionsemail and mappermissionsemailfile
Some checks failed
Build and test GAM / build (false, build, 1, Build Intel Ubuntu Jammy, ubuntu-22.04) (push) Has been cancelled
Build and test GAM / build (false, build, 10, Build x86_64 macOS 15, macos-15-intel) (push) Has been cancelled
Build and test GAM / build (false, build, 11, Build Arm MacOS 26, macos-26) (push) Has been cancelled
Build and test GAM / build (false, build, 12, Build Intel Windows, windows-2025) (push) Has been cancelled
Build and test GAM / build (false, build, 13, Build Arm Windows, windows-11-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 2, Build Intel Ubuntu Noble, ubuntu-24.04) (push) Has been cancelled
Build and test GAM / build (false, build, 3, Build Arm Ubuntu Noble, ubuntu-24.04-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 4, Build Arm Ubuntu Jammy, ubuntu-22.04-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 5, Build Intel StaticX Legacy, ubuntu-22.04, yes) (push) Has been cancelled
Build and test GAM / build (false, build, 6, Build Arm StaticX Legacy, ubuntu-22.04-arm, yes) (push) Has been cancelled
Build and test GAM / build (false, build, 8, Build Arm MacOS 14, macos-14) (push) Has been cancelled
Build and test GAM / build (false, build, 9, Build Arm MacOS 15, macos-15) (push) Has been cancelled
Build and test GAM / build (false, test, 14, Test Python 3.10, ubuntu-24.04, 3.10) (push) Has been cancelled
Build and test GAM / build (false, test, 15, Test Python 3.11, ubuntu-24.04, 3.11) (push) Has been cancelled
Build and test GAM / build (false, test, 16, Test Python 3.12, ubuntu-24.04, 3.12) (push) Has been cancelled
Build and test GAM / build (false, test, 17, Test Python 3.15-dev, ubuntu-24.04, 3.15-dev) (push) Has been cancelled
Build and test GAM / build (true, test, 18, Test Python 3.14 freethread, ubuntu-24.04, 3.14) (push) Has been cancelled
Build and test GAM / merge (push) Has been cancelled
Build and test GAM / publish (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Check for Google Root CA Updates / check-certs (push) Has been cancelled
Some checks failed
Build and test GAM / build (false, build, 1, Build Intel Ubuntu Jammy, ubuntu-22.04) (push) Has been cancelled
Build and test GAM / build (false, build, 10, Build x86_64 macOS 15, macos-15-intel) (push) Has been cancelled
Build and test GAM / build (false, build, 11, Build Arm MacOS 26, macos-26) (push) Has been cancelled
Build and test GAM / build (false, build, 12, Build Intel Windows, windows-2025) (push) Has been cancelled
Build and test GAM / build (false, build, 13, Build Arm Windows, windows-11-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 2, Build Intel Ubuntu Noble, ubuntu-24.04) (push) Has been cancelled
Build and test GAM / build (false, build, 3, Build Arm Ubuntu Noble, ubuntu-24.04-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 4, Build Arm Ubuntu Jammy, ubuntu-22.04-arm) (push) Has been cancelled
Build and test GAM / build (false, build, 5, Build Intel StaticX Legacy, ubuntu-22.04, yes) (push) Has been cancelled
Build and test GAM / build (false, build, 6, Build Arm StaticX Legacy, ubuntu-22.04-arm, yes) (push) Has been cancelled
Build and test GAM / build (false, build, 8, Build Arm MacOS 14, macos-14) (push) Has been cancelled
Build and test GAM / build (false, build, 9, Build Arm MacOS 15, macos-15) (push) Has been cancelled
Build and test GAM / build (false, test, 14, Test Python 3.10, ubuntu-24.04, 3.10) (push) Has been cancelled
Build and test GAM / build (false, test, 15, Test Python 3.11, ubuntu-24.04, 3.11) (push) Has been cancelled
Build and test GAM / build (false, test, 16, Test Python 3.12, ubuntu-24.04, 3.12) (push) Has been cancelled
Build and test GAM / build (false, test, 17, Test Python 3.15-dev, ubuntu-24.04, 3.15-dev) (push) Has been cancelled
Build and test GAM / build (true, test, 18, Test Python 3.14 freethread, ubuntu-24.04, 3.14) (push) Has been cancelled
Build and test GAM / merge (push) Has been cancelled
Build and test GAM / publish (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Check for Google Root CA Updates / check-certs (push) Has been cancelled
This commit is contained in:
@@ -5185,11 +5185,13 @@ gam copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
|||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
gam sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
gam sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
|
|
||||||
gam print shareddriveacls [todrive <ToDriveAttribute>*]
|
gam print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
@@ -5214,11 +5216,13 @@ gam <UserTypeEntity> copy shareddriveacls <SharedDriveEntity> to <SharedDriveEnt
|
|||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
gam <UserTypeEntity> sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
gam <UserTypeEntity> sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
[adminaccess|asadmin]
|
[adminaccess|asadmin]
|
||||||
[showpermissionsmessages [<Boolean>]]
|
[showpermissionsmessages [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
|
|
||||||
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
||||||
@@ -6808,6 +6812,7 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
|||||||
[copypermissionroles <DriveFileACLRoleList>]
|
[copypermissionroles <DriveFileACLRoleList>]
|
||||||
[copypermissiontypes <DriveFileACLTypeList>]
|
[copypermissiontypes <DriveFileACLTypeList>]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
[copysheetprotectedranges [<Boolean>]]
|
[copysheetprotectedranges [<Boolean>]]
|
||||||
[copysheetprotectedrangesinheritedpermissions [<Boolean>]]
|
[copysheetprotectedrangesinheritedpermissions [<Boolean>]]
|
||||||
@@ -6834,6 +6839,7 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[copysubfolderinheritedpermissions [<Boolean>]]
|
[copysubfolderinheritedpermissions [<Boolean>]]
|
||||||
[copysubfoldernoniheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
[copysubfoldernoniheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
[updatefilepermissions [<Boolean>]]
|
[updatefilepermissions [<Boolean>]]
|
||||||
[retainsourcefolders [<Boolean>]]
|
[retainsourcefolders [<Boolean>]]
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
7.29.00
|
||||||
|
|
||||||
|
Added options `mappermissionsemail <EmailAddress> <EmailAddress>` and ` mappermissionsemailfile <CSVFileInput> endcsv`
|
||||||
|
to these commands:
|
||||||
|
```
|
||||||
|
gam [<UserTypeEntity>] copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||||
|
gam [<UserTypeEntity>] sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
|
gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
||||||
|
gam <UserTypeEntity> move drivefile <DriveFileEntity>
|
||||||
|
```
|
||||||
|
When `mappermissionsemail <EmailAddress> <EmailAddress>` is specifed, an ACL that references the first `<EmailAddress>`
|
||||||
|
in the source will be modified to reference the second `<EmailAddress>` in the destination.
|
||||||
|
|
||||||
|
Bulk permission email address mapping can be specified with `mappermissionsemailfile <CSVFileInput> endcsv`.
|
||||||
|
`<CSVFileInput>` must include these columns: `sourceEmail` and `destinationEmail`.
|
||||||
|
|
||||||
|
These options will be most useful with inter-workspace Shared Drive copies and moves.
|
||||||
|
|
||||||
7.28.13
|
7.28.13
|
||||||
|
|
||||||
Added option `addcsvdata <FieldName> <String>` to `gam <UserTypeEntity> print messages`
|
Added option `addcsvdata <FieldName> <String>` to `gam <UserTypeEntity> print messages`
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.28.13'
|
__version__ = '7.29.00'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -61127,6 +61127,7 @@ def initCopyMoveOptions(copyCmd):
|
|||||||
'noCopyNonInheritedPermissions': COPY_NONINHERITED_PERMISSIONS_NEVER,
|
'noCopyNonInheritedPermissions': COPY_NONINHERITED_PERMISSIONS_NEVER,
|
||||||
'excludePermissionsFromDomains': set(),
|
'excludePermissionsFromDomains': set(),
|
||||||
'includePermissionsFromDomains': set(),
|
'includePermissionsFromDomains': set(),
|
||||||
|
'mapPermissionsEmails': {},
|
||||||
'mapPermissionsDomains': {},
|
'mapPermissionsDomains': {},
|
||||||
'copySheetProtectedRangesInheritedPermissions': False,
|
'copySheetProtectedRangesInheritedPermissions': False,
|
||||||
'copySheetProtectedRangesNonInheritedPermissions': COPY_NONINHERITED_PERMISSIONS_NEVER,
|
'copySheetProtectedRangesNonInheritedPermissions': COPY_NONINHERITED_PERMISSIONS_NEVER,
|
||||||
@@ -61203,6 +61204,18 @@ def getCopyMoveOptions(myarg, copyMoveOptions):
|
|||||||
elif myarg == 'includepermissionsfromdomains':
|
elif myarg == 'includepermissionsfromdomains':
|
||||||
copyMoveOptions['includePermissionsFromDomains'] = set(getString(Cmd.OB_DOMAIN_NAME_LIST).lower().replace(',', ' ').split())
|
copyMoveOptions['includePermissionsFromDomains'] = set(getString(Cmd.OB_DOMAIN_NAME_LIST).lower().replace(',', ' ').split())
|
||||||
copyMoveOptions['excludePermissionsFromDomains'] = set()
|
copyMoveOptions['excludePermissionsFromDomains'] = set()
|
||||||
|
elif myarg == 'mappermissionsemail':
|
||||||
|
sourceEmail = getEmailAddress(noUid=True).lower()
|
||||||
|
copyMoveOptions['mapPermissionsEmails'][sourceEmail] = getEmailAddress(noUid=True).lower()
|
||||||
|
elif myarg == 'mappermissionsemailfile':
|
||||||
|
csvInputLocation = Cmd.Location()
|
||||||
|
f, csvFile, _ = openCSVFileReader(getString(Cmd.OB_FILE_NAME))
|
||||||
|
if 'sourceEmail' not in csvFile.fieldnames or 'destinationEmail' not in csvFile.fieldnames:
|
||||||
|
Cmd.SetLocation(csvInputLocation)
|
||||||
|
usageErrorExit(Msg.MAP_PERMISSIONS_EMAIL_FILE_HEADERS_REQUIRED.format(myarg))
|
||||||
|
for row in csvFile:
|
||||||
|
copyMoveOptions['mapPermissionsEmails'][row['sourceEmail']] = row['destinationEmail']
|
||||||
|
closeFile(f)
|
||||||
elif myarg == 'mappermissionsdomain':
|
elif myarg == 'mappermissionsdomain':
|
||||||
oldDomain = getString(Cmd.OB_DOMAIN_NAME).lower()
|
oldDomain = getString(Cmd.OB_DOMAIN_NAME).lower()
|
||||||
copyMoveOptions['mapPermissionsDomains'][oldDomain] = getString(Cmd.OB_DOMAIN_NAME).lower()
|
copyMoveOptions['mapPermissionsDomains'][oldDomain] = getString(Cmd.OB_DOMAIN_NAME).lower()
|
||||||
@@ -61364,9 +61377,9 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|||||||
if permissionType in {'group', 'user'}:
|
if permissionType in {'group', 'user'}:
|
||||||
atLoc = emailAddress.find('@')
|
atLoc = emailAddress.find('@')
|
||||||
if atLoc > 0:
|
if atLoc > 0:
|
||||||
domain = emailAddress[atLoc+1:]
|
domain = emailAddress[atLoc+1:].lower()
|
||||||
elif permissionType == 'domain':
|
elif permissionType == 'domain':
|
||||||
domain = permission.get('domain', '')
|
domain = permission.get('domain', '').lower()
|
||||||
if role not in copyMoveOptions['copyPermissionRoles']:
|
if role not in copyMoveOptions['copyPermissionRoles']:
|
||||||
notCopiedMessage = f'role {role} not selected'
|
notCopiedMessage = f'role {role} not selected'
|
||||||
elif permissionType not in copyMoveOptions['copyPermissionTypes']:
|
elif permissionType not in copyMoveOptions['copyPermissionTypes']:
|
||||||
@@ -61416,7 +61429,12 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|||||||
|
|
||||||
def mapPermissionsDomains(srcPerm):
|
def mapPermissionsDomains(srcPerm):
|
||||||
if 'emailAddress' in srcPerm:
|
if 'emailAddress' in srcPerm:
|
||||||
email, domain = srcPerm['emailAddress'].lower().split('@', 1)
|
sourceEmail = srcPerm['emailAddress'].lower()
|
||||||
|
destEmail = copyMoveOptions['mapPermissionsEmails'].get(sourceEmail, None)
|
||||||
|
if destEmail:
|
||||||
|
srcPerm['emailAddress'] = destEmail
|
||||||
|
return True
|
||||||
|
email, domain = sourceEmail.split('@', 1)
|
||||||
if domain in copyMoveOptions['mapPermissionsDomains']:
|
if domain in copyMoveOptions['mapPermissionsDomains']:
|
||||||
srcPerm['emailAddress'] = f"{email}@{copyMoveOptions['mapPermissionsDomains'][domain]}"
|
srcPerm['emailAddress'] = f"{email}@{copyMoveOptions['mapPermissionsDomains'][domain]}"
|
||||||
return True
|
return True
|
||||||
@@ -61438,7 +61456,7 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|||||||
if isPermissionCopyable(kvList, permission):
|
if isPermissionCopyable(kvList, permission):
|
||||||
copySourcePerms[permissionId] = permission
|
copySourcePerms[permissionId] = permission
|
||||||
if copyMoveOptions[copyNonInherited] == COPY_NONINHERITED_PERMISSIONS_ALWAYS:
|
if copyMoveOptions[copyNonInherited] == COPY_NONINHERITED_PERMISSIONS_ALWAYS:
|
||||||
if copyMoveOptions['mapPermissionsDomains']:
|
if copyMoveOptions['mapPermissionsDomains'] or copyMoveOptions['mapPermissionsEmails']:
|
||||||
for permissionId in getNonInheritedPermissions(copySourcePerms):
|
for permissionId in getNonInheritedPermissions(copySourcePerms):
|
||||||
mapPermissionsDomains(copySourcePerms[permissionId])
|
mapPermissionsDomains(copySourcePerms[permissionId])
|
||||||
elif copyMoveOptions[copyNonInherited] in {COPY_NONINHERITED_PERMISSIONS_SYNC_ALL_FOLDERS,
|
elif copyMoveOptions[copyNonInherited] in {COPY_NONINHERITED_PERMISSIONS_SYNC_ALL_FOLDERS,
|
||||||
@@ -61449,7 +61467,7 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|||||||
sourceNonInheritedPermIDs = getNonInheritedPermissions(copySourcePerms)
|
sourceNonInheritedPermIDs = getNonInheritedPermissions(copySourcePerms)
|
||||||
targetNonInheritedPermIDs = getNonInheritedPermissions(targetPerms)
|
targetNonInheritedPermIDs = getNonInheritedPermissions(targetPerms)
|
||||||
# Permissions in Source only
|
# Permissions in Source only
|
||||||
if copyMoveOptions['mapPermissionsDomains']:
|
if copyMoveOptions['mapPermissionsDomains'] or copyMoveOptions['mapPermissionsEmails']:
|
||||||
for permissionId in sourceNonInheritedPermIDs-targetNonInheritedPermIDs:
|
for permissionId in sourceNonInheritedPermIDs-targetNonInheritedPermIDs:
|
||||||
mapPermissionsDomains(copySourcePerms[permissionId])
|
mapPermissionsDomains(copySourcePerms[permissionId])
|
||||||
# Permissions in Target only
|
# Permissions in Target only
|
||||||
@@ -61457,7 +61475,7 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|||||||
# Permissions in Source and Target
|
# Permissions in Source and Target
|
||||||
for permissionId in targetNonInheritedPermIDs&sourceNonInheritedPermIDs:
|
for permissionId in targetNonInheritedPermIDs&sourceNonInheritedPermIDs:
|
||||||
srcPerm = copySourcePerms[permissionId]
|
srcPerm = copySourcePerms[permissionId]
|
||||||
if copyMoveOptions['mapPermissionsDomains'] and mapPermissionsDomains(srcPerm):
|
if (copyMoveOptions['mapPermissionsDomains'] or copyMoveOptions['mapPermissionsEmails']) and mapPermissionsDomains(srcPerm):
|
||||||
deleteTargetPermIds.add(permissionId)
|
deleteTargetPermIds.add(permissionId)
|
||||||
continue
|
continue
|
||||||
tgtPerm = targetPerms[permissionId]
|
tgtPerm = targetPerms[permissionId]
|
||||||
@@ -61838,6 +61856,7 @@ copyReturnItemMap = {
|
|||||||
# [copypermissionroles <DriveFileACLRoleList>]
|
# [copypermissionroles <DriveFileACLRoleList>]
|
||||||
# [copypermissiontypes <DriveFileACLTypeList>]
|
# [copypermissiontypes <DriveFileACLTypeList>]
|
||||||
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
# (mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
# (mappermissionsdomain <DomainName> <DomainName>)*
|
# (mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
# [copysheetprotectedranges [<Boolean>]]
|
# [copysheetprotectedranges [<Boolean>]]
|
||||||
# [copysheetprotectedrangesinheritedpermissions [<Boolean>]]
|
# [copysheetprotectedrangesinheritedpermissions [<Boolean>]]
|
||||||
@@ -62512,9 +62531,9 @@ def _updateMoveFilePermissions(drive, user, i, count,
|
|||||||
if permission['type'] in {'group', 'user'}:
|
if permission['type'] in {'group', 'user'}:
|
||||||
atLoc = permission.get('emailAddress', '').find('@')
|
atLoc = permission.get('emailAddress', '').find('@')
|
||||||
if atLoc > 0:
|
if atLoc > 0:
|
||||||
domain = permission['emailAddress'][atLoc+1:]
|
domain = permission['emailAddress'][atLoc+1:].lower()
|
||||||
elif permission['type'] == 'domain':
|
elif permission['type'] == 'domain':
|
||||||
domain = permission.get('domain', '')
|
domain = permission.get('domain', '').lower()
|
||||||
if domain and domain in copyMoveOptions['excludePermissionsFromDomains']:
|
if domain and domain in copyMoveOptions['excludePermissionsFromDomains']:
|
||||||
notMovedMessage = f'domain {domain} excluded'
|
notMovedMessage = f'domain {domain} excluded'
|
||||||
elif domain and copyMoveOptions['includePermissionsFromDomains'] and domain not in copyMoveOptions['includePermissionsFromDomains']:
|
elif domain and copyMoveOptions['includePermissionsFromDomains'] and domain not in copyMoveOptions['includePermissionsFromDomains']:
|
||||||
@@ -62530,13 +62549,24 @@ def _updateMoveFilePermissions(drive, user, i, count,
|
|||||||
|
|
||||||
def mapPermissionsDomains(kvList, permission):
|
def mapPermissionsDomains(kvList, permission):
|
||||||
if 'emailAddress' in permission:
|
if 'emailAddress' in permission:
|
||||||
email, domain = permission['emailAddress'].lower().split('@', 1)
|
sourceEmail = permission['emailAddress'].lower()
|
||||||
if domain in copyMoveOptions['mapPermissionsDomains']:
|
destEmail = copyMoveOptions['mapPermissionsEmails'].get(sourceEmail, None)
|
||||||
|
if destEmail:
|
||||||
deleteSourcePerms[permission['id']] = permission.copy()
|
deleteSourcePerms[permission['id']] = permission.copy()
|
||||||
if copyMoveOptions['showPermissionMessages']:
|
if copyMoveOptions['showPermissionMessages']:
|
||||||
notMovedMessage = f"domain {domain} mapped to {copyMoveOptions['mapPermissionsDomains'][domain]}"
|
notMovedMessage = f"email {sourceEmail} mapped to {destEmail}"
|
||||||
entityActionNotPerformedWarning(kvList, notMovedMessage, 0, 0)
|
entityActionNotPerformedWarning(kvList, notMovedMessage, 0, 0)
|
||||||
permission['emailAddress'] = f"{email}@{copyMoveOptions['mapPermissionsDomains'][domain]}"
|
permission['emailAddress'] = destEmail
|
||||||
|
addSourcePerms[permission['id']] = permission
|
||||||
|
return True
|
||||||
|
email, domain = sourceEmail.split('@', 1)
|
||||||
|
if domain in copyMoveOptions['mapPermissionsDomains']:
|
||||||
|
destEmail = f"{email}@{copyMoveOptions['mapPermissionsDomains'][domain]}"
|
||||||
|
deleteSourcePerms[permission['id']] = permission.copy()
|
||||||
|
if copyMoveOptions['showPermissionMessages']:
|
||||||
|
notMovedMessage = f"email {sourceEmail} mapped to {destEmail}"
|
||||||
|
entityActionNotPerformedWarning(kvList, notMovedMessage, 0, 0)
|
||||||
|
permission['emailAddress'] = destEmail
|
||||||
addSourcePerms[permission['id']] = permission
|
addSourcePerms[permission['id']] = permission
|
||||||
return True
|
return True
|
||||||
elif 'domain' in permission:
|
elif 'domain' in permission:
|
||||||
@@ -62561,7 +62591,7 @@ def _updateMoveFilePermissions(drive, user, i, count,
|
|||||||
kvList = permissionKVList(user, entityType, fileTitle, permission)
|
kvList = permissionKVList(user, entityType, fileTitle, permission)
|
||||||
if isPermissionDeletable(kvList, permission):
|
if isPermissionDeletable(kvList, permission):
|
||||||
pass
|
pass
|
||||||
elif copyMoveOptions['mapPermissionsDomains']:
|
elif copyMoveOptions['mapPermissionsDomains'] or copyMoveOptions['mapPermissionsEmails']:
|
||||||
mapPermissionsDomains(kvList, permission)
|
mapPermissionsDomains(kvList, permission)
|
||||||
action = Act.Get()
|
action = Act.Get()
|
||||||
kcount = len(deleteSourcePerms)
|
kcount = len(deleteSourcePerms)
|
||||||
@@ -62661,6 +62691,7 @@ def _updateMoveFilePermissions(drive, user, i, count,
|
|||||||
# [copypermissiontypes <DriveFileACLTypeList>]
|
# [copypermissiontypes <DriveFileACLTypeList>]
|
||||||
# [synctopfoldernoniheritedpermissions [<Boolean>]] [syncsubfoldernoninheritedpermissions [<Boolean>]]
|
# [synctopfoldernoniheritedpermissions [<Boolean>]] [syncsubfoldernoninheritedpermissions [<Boolean>]]
|
||||||
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
# (mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
# (mappermissionsdomain <DomainName> <DomainName>)*
|
# (mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
# [updatefilepermissions [<Boolean>]]
|
# [updatefilepermissions [<Boolean>]]
|
||||||
# [retainsourcefolders [<Boolean>]]
|
# [retainsourcefolders [<Boolean>]]
|
||||||
@@ -68135,10 +68166,16 @@ def doPrintShowOrgunitSharedDrives():
|
|||||||
csvPF.writeCSVfile('OrgUnit {orgUnitPath} SharedDrives')
|
csvPF.writeCSVfile('OrgUnit {orgUnitPath} SharedDrives')
|
||||||
|
|
||||||
# gam [<UserTypeEntity>] copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
# gam [<UserTypeEntity>] copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
||||||
|
# [asadmin]
|
||||||
|
# [showpermissionsmessages [<Boolean>]]
|
||||||
|
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
# (mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
|
# (mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
# gam [<UserTypeEntity>] sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
# gam [<UserTypeEntity>] sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
||||||
# [asadmin]
|
# [asadmin]
|
||||||
# [showpermissionsmessages [<Boolean>]]
|
# [showpermissionsmessages [<Boolean>]]
|
||||||
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
# [excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
|
# (mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
# (mappermissionsdomain <DomainName> <DomainName>)*
|
# (mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
||||||
copyMoveOptions = initCopyMoveOptions(True)
|
copyMoveOptions = initCopyMoveOptions(True)
|
||||||
@@ -68166,13 +68203,15 @@ def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
|||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
if not srcFileIdEntity.get('shareddrivename'):
|
if not srcFileIdEntity.get('shareddrivename'):
|
||||||
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, srcFileIdEntity['shareddrive']['driveId'])
|
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, srcFileIdEntity['shareddrive']['driveId'],
|
||||||
|
useDomainAdminAccess)
|
||||||
if tgtFileIdEntity.get('shareddrivename'):
|
if tgtFileIdEntity.get('shareddrivename'):
|
||||||
if not _convertSharedDriveNameToId(drive, user, i, count, tgtFileIdEntity, useDomainAdminAccess):
|
if not _convertSharedDriveNameToId(drive, user, i, count, tgtFileIdEntity, useDomainAdminAccess):
|
||||||
continue
|
continue
|
||||||
tgtFileIdEntity['shareddrive']['corpora'] = 'drive'
|
tgtFileIdEntity['shareddrive']['corpora'] = 'drive'
|
||||||
else:
|
else:
|
||||||
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, tgtFileIdEntity['shareddrive']['driveId'])
|
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, tgtFileIdEntity['shareddrive']['driveId'],
|
||||||
|
useDomainAdminAccess)
|
||||||
statistics = _initStatistics()
|
statistics = _initStatistics()
|
||||||
copyMoveOptions['sourceDriveId'] = srcFileIdEntity['shareddrive']['driveId']
|
copyMoveOptions['sourceDriveId'] = srcFileIdEntity['shareddrive']['driveId']
|
||||||
copyMoveOptions['destDriveId'] = tgtFileIdEntity['shareddrive']['driveId']
|
copyMoveOptions['destDriveId'] = tgtFileIdEntity['shareddrive']['driveId']
|
||||||
|
|||||||
@@ -355,6 +355,7 @@ LESS_THAN_1_SECOND = 'less than 1 second'
|
|||||||
LIST_CHROMEOS_INVALID_INPUT_PAGE_TOKEN_RETRY = 'List ChromeOSdevices Invalid Input: pageToken retry'
|
LIST_CHROMEOS_INVALID_INPUT_PAGE_TOKEN_RETRY = 'List ChromeOSdevices Invalid Input: pageToken retry'
|
||||||
LOGGING_INITIALIZATION_ERROR = 'Logging initialization error: {0}'
|
LOGGING_INITIALIZATION_ERROR = 'Logging initialization error: {0}'
|
||||||
LOOKING_UP_GOOGLE_UNIQUE_ID = 'Looking up Google Unique ID'
|
LOOKING_UP_GOOGLE_UNIQUE_ID = 'Looking up Google Unique ID'
|
||||||
|
MAP_PERMISSIONS_EMAIL_FILE_HEADERS_REQUIRED = '{0} <CSVFileInput> requires headers "sourceEmail" and "destinationEmail"'
|
||||||
MARKED_AS = 'Marked as'
|
MARKED_AS = 'Marked as'
|
||||||
MATCHED_THE_FOLLOWING = 'Matched the following'
|
MATCHED_THE_FOLLOWING = 'Matched the following'
|
||||||
MATTER_NOT_OPEN = 'Matter needs to be open, current state is: {0}'
|
MATTER_NOT_OPEN = 'Matter needs to be open, current state is: {0}'
|
||||||
|
|||||||
Reference in New Issue
Block a user