| 212 | return new_perms |
| 213 | |
| 214 | def load(self, params, sf_sharing_admins, team_members, role_restricted_members): |
| 215 | def apply_team_restrictions(team_perms): |
| 216 | if not params.enterprise: |
| 217 | return team_perms |
| 218 | |
| 219 | restriction_permission_lookup = { |
| 220 | 'restrict_edit': 'manage_records', |
| 221 | 'restrict_sharing': 'manage_users', |
| 222 | 'restrict_view': 'view' |
| 223 | } |
| 224 | |
| 225 | teams_cache = params.enterprise.get('teams', {}) |
| 226 | perms = team_perms.copy() |
| 227 | team_info = next((t for t in teams_cache if t.get('team_uid') == perms.get('team_uid'))) |
| 228 | for restriction, permission in restriction_permission_lookup.items(): |
| 229 | if team_info.get(restriction): |
| 230 | perms[permission] = False |
| 231 | return perms |
| 232 | |
| 233 | def apply_role_restrictions(): |
| 234 | for restricted_target in role_restricted_members: |
| 235 | perms = self.permissions.get(restricted_target) |
| 236 | perms and perms.apply_restrictions('share') |
| 237 | |
| 238 | def update_sf_shares(share_to, sf_uid): |
| 239 | if sf_uid: |
| 240 | sf_shares = self.sf_shares.get(sf_uid, set()) |
| 241 | sf_shares.add(share_to) |
| 242 | self.sf_shares[sf_uid] = sf_shares |
| 243 | |
| 244 | def load_user_permissions(u_perms, sf_uid=None, sp_type=None): |
| 245 | for up in u_perms: |
| 246 | email = up.get('username') |
| 247 | update_sf_shares(email, sf_uid) |
| 248 | share_admins = sf_sharing_admins.get(sf_uid) |
| 249 | is_admin = share_admins and email in share_admins |
| 250 | if is_admin: |
| 251 | up['editable'] = True |
| 252 | up['shareable'] = True |
| 253 | up['share_admin'] = True |
| 254 | self.merge_user_permissions(email, up, sp_type) |
| 255 | |
| 256 | def load_team_permissions(t_perms, sf_uid): |
| 257 | for tp in t_perms: |
| 258 | team_uid = tp.get('team_uid') |
| 259 | team_name = tp.get('name') |
| 260 | update_sf_shares(team_name, sf_uid) |
| 261 | tp = apply_team_restrictions(tp) |
| 262 | merged = self.merge_team_permissions(team_uid, tp) |
| 263 | |
| 264 | # load team-members' permissions |
| 265 | t_users = team_members.get(team_uid, set()) |
| 266 | ups = [{**tp, 'username': t_username} for t_username in t_users] |
| 267 | load_user_permissions(ups, sf_uid, SharePermissions.SharePermissionsType.TEAM_USER) |
| 268 | merged.team_members.update({t_username: self.permissions.get(t_username) for t_username in t_users}) |
| 269 | |
| 270 | rec_cached = params.record_cache.get(self.uid) |
| 271 | shares = rec_cached.get('shares', dict()) |