Skip to content

Commit a8f86ab

Browse files
committed
squash!: Attend PR comments
1 parent 25da4ea commit a8f86ab

1 file changed

Lines changed: 37 additions & 10 deletions

File tree

openedx_authz/migrations/0002_migrate_legacy_permissions.py

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,25 @@
1010
logger = logging.getLogger(__name__)
1111

1212

13+
def _log_migration_errors(permissions_with_errors: list) -> None:
14+
"""
15+
Log the permissions that could not be migrated during the migration process.
16+
Args:
17+
permissions_with_errors (list): List of ContentLibraryPermission instances that failed to migrate.
18+
"""
19+
logger.error(
20+
f"Migration completed with errors for {len(permissions_with_errors)} permissions.\n"
21+
"The following permissions could not be migrated:"
22+
)
23+
for permission in permissions_with_errors:
24+
logger.error(
25+
"Access level: %s, %sLibrary: %s",
26+
permission.access_level,
27+
f"User: {permission.user.username}, " if permission.user else f"Group: {permission.group.name}, ",
28+
permission.library.slug
29+
)
30+
31+
1332
def migrate_legacy_permissions(apps, schema_editor):
1433
"""
1534
Migrate legacy permission data to the new Casbin-based authorization model.
@@ -46,22 +65,27 @@ def migrate_legacy_permissions(apps, schema_editor):
4665
'library', 'library__org', 'user', 'group'
4766
).all()
4867

68+
# List to keep track of any permissions that could not be migrated
69+
permissions_with_errors = []
70+
4971
for permission in legacy_permissions:
5072
# Migrate the permission to the new model
5173

5274
# Derive equivalent role based on access level
53-
role = LIBRARY_USER
54-
if permission.access_level == 'admin':
55-
role = LIBRARY_ADMIN
56-
elif permission.access_level == 'author':
57-
role = LIBRARY_AUTHOR
58-
elif permission.access_level == 'read':
59-
role = LIBRARY_USER
60-
else:
75+
access_level_to_role = {
76+
'admin': LIBRARY_ADMIN,
77+
'author': LIBRARY_AUTHOR,
78+
'read': LIBRARY_USER,
79+
}
80+
81+
role = access_level_to_role.get(permission.access_level)
82+
if role is None:
6183
# This should not happen as there are no more access_levels defined
6284
# in ContentLibraryPermission, log and skip
63-
logger.warning(
64-
f"Unknown access level: {permission.access_level} for User: {permission.user}")
85+
logger.error(
86+
f"Unknown access level: {permission.access_level} for User: {permission.user}"
87+
)
88+
permissions_with_errors.append(permission)
6589
continue
6690

6791
# Generating scope based on library identifier
@@ -92,6 +116,9 @@ def migrate_legacy_permissions(apps, schema_editor):
92116
scope_external_key=scope
93117
)
94118

119+
if permissions_with_errors:
120+
_log_migration_errors(permissions_with_errors)
121+
95122

96123
class Migration(migrations.Migration):
97124
"""

0 commit comments

Comments
 (0)