MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / _classic_folder_share_data

Function _classic_folder_share_data

keepercommander/commands/folder.py:2094–2192  ·  view source on GitHub ↗

Return structured classic SF share perms and compact text suffix. Tree text uses a single ``default:`` blob (all default flags). JSON splits folder-user defaults vs default record rights: - user_permissions: MU / MR (default manage users / manage records) - record_permissions: C

(params, sf, *, include_uids=False)

Source from the content-addressed store, hash-verified

2092
2093
2094def _classic_folder_share_data(params, sf, *, include_uids=False):
2095 """Return structured classic SF share perms and compact text suffix.
2096
2097 Tree text uses a single ``default:`` blob (all default flags).
2098 JSON splits folder-user defaults vs default record rights:
2099 - user_permissions: MU / MR (default manage users / manage records)
2100 - record_permissions: CE / CS (default can-edit / can-share on records)
2101 Named people/teams remain under ``users`` / ``teams``.
2102 """
2103 DEFAULT_USER_PERM_KEYS = {
2104 'default_manage_users': 'MU',
2105 'default_manage_user': 'MU', # legacy alias if present
2106 'default_manage_records': 'MR',
2107 }
2108 RECORD_PERM_KEYS = {
2109 'default_can_edit': 'CE',
2110 'default_can_share': 'CS',
2111 }
2112 MEMBER_PERM_KEYS = {
2113 'manage_users': 'MU',
2114 'manage_records': 'MR',
2115 }
2116
2117 sf = sf or {}
2118 user_permissions = [abbr for key, abbr in DEFAULT_USER_PERM_KEYS.items() if sf.get(key)]
2119 user_permissions = [a for a in ('MU', 'MR') if a in user_permissions]
2120 record_permissions = [abbr for key, abbr in RECORD_PERM_KEYS.items() if sf.get(key)]
2121 record_permissions = [a for a in ('CE', 'CS') if a in record_permissions]
2122
2123 default_perms = user_permissions + record_permissions
2124 if not default_perms:
2125 default_perms = ['RO']
2126
2127 users = []
2128 user_parts = []
2129 seen_emails = set()
2130 for u in sf.get('users') or []:
2131 email = _resolve_sf_member_email(params, u)
2132 account_uid = u.get('account_uid') or ''
2133 privs = [abbr for key_name, abbr in MEMBER_PERM_KEYS.items() if u.get(key_name)]
2134 privs = [a for a in ('MU', 'MR') if a in privs] or ['RO']
2135 if not email:
2136 # Sync often has account_uid only until user_cache fills; still emit membership.
2137 if account_uid:
2138 entry = {'uid': account_uid, 'permissions': privs}
2139 users.append(entry)
2140 user_parts.append(f'[{account_uid}:{",".join(privs)}]')
2141 continue
2142 key = email.lower()
2143 if key in seen_emails:
2144 continue
2145 seen_emails.add(key)
2146 entry = {'email': email, 'permissions': privs}
2147 if include_uids and account_uid:
2148 entry['uid'] = account_uid
2149 users.append(entry)
2150 user_parts.append(f'[{email}:{",".join(privs)}]')
2151

Calls 5

_resolve_sf_member_emailFunction · 0.85
_looks_like_uidFunction · 0.85
_resolve_tree_team_nameFunction · 0.85
getMethod · 0.80
addMethod · 0.45