Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ def update_unclaimed_records_for_preprint_versions(dry_run=False):
referrer=referrer,
given_name=record_info.get('name', None),
email=record_info.get('email', None),
skip_referrer_permissions=True
)
contributor.user.save()
updated_count += 1
Expand All @@ -137,6 +138,7 @@ def update_unclaimed_records_for_preprint_versions(dry_run=False):
referrer=current_preprint.creator,
given_name=contributor.user.fullname,
email=contributor.user.username,
skip_referrer_permissions=True
)
contributor.user.save()
updated_count += 1
Expand Down
36 changes: 19 additions & 17 deletions osf/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -1665,35 +1665,37 @@ def n_projects_in_common(self, other_user):
"""Returns number of "shared projects" (projects that both users are contributors or group members for)"""
return self._projects_in_common_query(other_user).count()

def add_unclaimed_record(self, claim_origin, referrer, given_name, email=None):
def add_unclaimed_record(self, claim_origin, referrer, given_name, email=None, skip_referrer_permissions=False):
"""Add a new project entry in the unclaimed records dictionary.

:param object claim_origin: Object this unclaimed user was added to. currently `Node` or `Provider` or `Preprint`
:param User referrer: User who referred this user.
:param str given_name: The full name that the referrer gave for this user.
:param str email: The given email address.
:param bool skip_referrer_permissions: The flag to check permissions for referrer.
:returns: The added record
"""

from .provider import AbstractProvider
from .osf_group import OSFGroup

if isinstance(claim_origin, AbstractProvider):
if not bool(get_perms(referrer, claim_origin)):
raise PermissionsError(
f'Referrer does not have permission to add a moderator to provider {claim_origin._id}'
)

elif isinstance(claim_origin, OSFGroup):
if not claim_origin.has_permission(referrer, MANAGE):
raise PermissionsError(
f'Referrer does not have permission to add a member to {claim_origin._id}'
)
else:
if not claim_origin.has_permission(referrer, ADMIN):
raise PermissionsError(
f'Referrer does not have permission to add a contributor to {claim_origin._id}'
)
if not skip_referrer_permissions:
if isinstance(claim_origin, AbstractProvider):
if not bool(get_perms(referrer, claim_origin)):
raise PermissionsError(
f'Referrer does not have permission to add a moderator to provider {claim_origin._id}'
)

elif isinstance(claim_origin, OSFGroup):
if not claim_origin.has_permission(referrer, MANAGE):
raise PermissionsError(
f'Referrer does not have permission to add a member to {claim_origin._id}'
)
else:
if not claim_origin.has_permission(referrer, ADMIN):
raise PermissionsError(
f'Referrer does not have permission to add a contributor to {claim_origin._id}'
)

pid = str(claim_origin._id)
referrer_id = str(referrer._id)
Expand Down
Loading