Make access level an int instead of a string.

We started with a string because we thought it could maybe provide more
flexibility, though really, an int makes much more sense, especially on
all the platforms etebase runs nowadays.
This commit is contained in:
Tom Hacohen 2020-09-07 11:02:40 +03:00
parent 43569727f4
commit d90931fbe5
5 changed files with 112 additions and 8 deletions

View File

@ -0,0 +1,23 @@
# Generated by Django 3.1 on 2020-09-07 07:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('django_etebase', '0025_auto_20200804_1216'),
]
operations = [
migrations.RenameField(
model_name='collectioninvitation',
old_name='accessLevel',
new_name='accessLevelOld',
),
migrations.RenameField(
model_name='collectionmember',
old_name='accessLevel',
new_name='accessLevelOld',
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.1 on 2020-09-07 07:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('django_etebase', '0026_auto_20200907_0752'),
]
operations = [
migrations.AddField(
model_name='collectioninvitation',
name='accessLevel',
field=models.IntegerField(choices=[(0, 'Read Only'), (1, 'Admin'), (2, 'Read Write')], default=0),
),
migrations.AddField(
model_name='collectionmember',
name='accessLevel',
field=models.IntegerField(choices=[(0, 'Read Only'), (1, 'Admin'), (2, 'Read Write')], default=0),
),
]

View File

@ -0,0 +1,39 @@
# Generated by Django 3.1 on 2020-09-07 07:54
from django.db import migrations
from django_etebase.models import AccessLevels
def change_access_level_to_int(apps, schema_editor):
CollectionMember = apps.get_model('django_etebase', 'CollectionMember')
CollectionInvitation = apps.get_model('django_etebase', 'CollectionInvitation')
for member in CollectionMember.objects.all():
if member.accessLevelOld == 'adm':
member.accessLevel = AccessLevels.ADMIN
elif member.accessLevelOld == 'rw':
member.accessLevel = AccessLevels.READ_WRITE
elif member.accessLevelOld == 'ro':
member.accessLevel = AccessLevels.READ_ONLY
member.save()
for invitation in CollectionInvitation.objects.all():
if invitation.accessLevelOld == 'adm':
invitation.accessLevel = AccessLevels.ADMIN
elif invitation.accessLevelOld == 'rw':
invitation.accessLevel = AccessLevels.READ_WRITE
elif invitation.accessLevelOld == 'ro':
invitation.accessLevel = AccessLevels.READ_ONLY
invitation.save()
class Migration(migrations.Migration):
dependencies = [
('django_etebase', '0027_auto_20200907_0752'),
]
operations = [
migrations.RunPython(change_access_level_to_int),
]

View File

@ -0,0 +1,21 @@
# Generated by Django 3.1 on 2020-09-07 08:01
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('django_etebase', '0028_auto_20200907_0754'),
]
operations = [
migrations.RemoveField(
model_name='collectioninvitation',
name='accessLevelOld',
),
migrations.RemoveField(
model_name='collectionmember',
name='accessLevelOld',
),
]

View File

@ -138,10 +138,10 @@ class RevisionChunkRelation(models.Model):
ordering = ('id', ) ordering = ('id', )
class AccessLevels(models.TextChoices): class AccessLevels(models.IntegerChoices):
ADMIN = 'adm' READ_ONLY = 0
READ_WRITE = 'rw' ADMIN = 1
READ_ONLY = 'ro' READ_WRITE = 2
class CollectionMember(models.Model): class CollectionMember(models.Model):
@ -149,8 +149,7 @@ class CollectionMember(models.Model):
collection = models.ForeignKey(Collection, related_name='members', on_delete=models.CASCADE) collection = models.ForeignKey(Collection, related_name='members', on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
encryptionKey = models.BinaryField(editable=True, blank=False, null=False) encryptionKey = models.BinaryField(editable=True, blank=False, null=False)
accessLevel = models.CharField( accessLevel = models.IntegerField(
max_length=3,
choices=AccessLevels.choices, choices=AccessLevels.choices,
default=AccessLevels.READ_ONLY, default=AccessLevels.READ_ONLY,
) )
@ -195,8 +194,7 @@ class CollectionInvitation(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='incoming_invitations', on_delete=models.CASCADE) user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='incoming_invitations', on_delete=models.CASCADE)
signedEncryptionKey = models.BinaryField(editable=False, blank=False, null=False) signedEncryptionKey = models.BinaryField(editable=False, blank=False, null=False)
accessLevel = models.CharField( accessLevel = models.IntegerField(
max_length=3,
choices=AccessLevels.choices, choices=AccessLevels.choices,
default=AccessLevels.READ_ONLY, default=AccessLevels.READ_ONLY,
) )