Skip to content

Commit

Permalink
Migrate user permissions from previous release
Browse files Browse the repository at this point in the history
User permissions are stored in a separate table within
the database. These permissions will be automatically
migrated when running sortinghat-admin upgrade.

Signed-off-by: Jose Javier Merchante <jjmerchante@bitergia.com>
  • Loading branch information
jjmerchante authored and sduenas committed Sep 3, 2024
1 parent 746e851 commit 136ddcb
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
9 changes: 9 additions & 0 deletions releases/unreleased/users-permissions-migrated.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
title: Users permissions migrated
category: fixed
author: Jose Javier Merchante <jjmerchante@bitergia.com>
issue: 849
notes: >
User permissions are stored in a separate table within
the database. These permissions will be automatically
migrated when running `sortinghat-admin upgrade`.
2 changes: 1 addition & 1 deletion sortinghat/core/migrations/0009_tenant_perm_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='tenant',
name='perm_group',
field=models.CharField(default='readonly', max_length=128),
field=models.CharField(default='user', max_length=128),
),
]
30 changes: 30 additions & 0 deletions sortinghat/server/sortinghat_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ def upgrade(no_database):

_install_static_files()
_setup_group_permissions(database='default')
_migrate_users_permissions()

click.secho("SortingHat upgrade completed", fg='bright_cyan')

Expand Down Expand Up @@ -384,6 +385,35 @@ def _setup_group_permissions(database='default'):
click.echo("SortingHat groups created.\n")


def _migrate_users_permissions():
"""Migrate permissions for users from the previous version"""

from sortinghat.core.models import Tenant
from django.contrib.auth.models import Group

users = get_user_model().objects.all()

if settings.MULTI_TENANT:
for user in users:
group = user.groups.first()
if not group:
continue
Tenant.objects.filter(user=user).update(perm_group=group.name)
click.echo(f"Permissions for '{user}' updated to '{group.name}'.")
user.groups.clear()
else:
for user in users:
group = user.groups.first()
if group:
continue
if user.is_superuser:
group = Group.objects.get(name='admin')
else:
group = Group.objects.get(name='user')
click.echo(f"Permissions for '{user}' updated to '{group.name}'.")
user.groups.set([group.id])


def _install_static_files():
"""Collect static files and installed them."""

Expand Down

0 comments on commit 136ddcb

Please sign in to comment.