99 lines
3.2 KiB
Python
99 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
|
|
from django.db import migrations
|
|
from django.db.models import Q
|
|
|
|
|
|
def update_permissions(apps, schema_editor):
|
|
Permission = apps.get_model('auth', 'Permission')
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
Account = apps.get_model('kfet', 'Account')
|
|
|
|
# If `kfet.is_team` permission exists, rename it.
|
|
|
|
Permission.objects.filter(
|
|
content_type__app_label='kfet',
|
|
content_type__model='account',
|
|
codename='is_team',
|
|
).update(name="Membre de l'équipe")
|
|
|
|
# If `kfet.view_negs` permission exists, move it as
|
|
# `kfet.view_accountnegative`.
|
|
|
|
try:
|
|
view_negs_p = Permission.objects.get(
|
|
content_type__app_label='kfet',
|
|
content_type__model='accountnegative',
|
|
codename='view_negs',
|
|
)
|
|
except Permission.DoesNotExist:
|
|
pass
|
|
else:
|
|
# Avoid failure due to unicity constraint if migrations were partially
|
|
# applied.
|
|
# Because `view_negs` still exists here, it should be safe to consider
|
|
# that nothing uses `view_accountnegative` so that it can be deleted.
|
|
Permission.objects.filter(
|
|
content_type__app_label='kfet',
|
|
content_type__model='accountnegative',
|
|
codename='view_accountnegative',
|
|
).delete()
|
|
|
|
view_negs_p.codename = 'view_accountnegative'
|
|
view_negs_p.name = 'Can view Compte en négatif'
|
|
view_negs_p.save()
|
|
|
|
# Delete unused permissions.
|
|
|
|
to_delete = {
|
|
'account': ['delete_account'],
|
|
'accountnegative': [
|
|
'add_accountnegative', 'delete_accountnegative', 'view_negs'],
|
|
'article': ['delete_article'],
|
|
'articlecategory': ['add_articlecategory', 'delete_articlecategory'],
|
|
'articlerule': '__all__',
|
|
'checkout': ['delete_checkout'],
|
|
'checkoutstatement': ['delete_checkoutstatement'],
|
|
'checkouttransfer': '__all__',
|
|
'inventory': ['change_inventory', 'delete_inventory'],
|
|
'inventoryarticle': '__all__',
|
|
'operation': ['add_operation', 'change_operation', 'delete_operation'],
|
|
'operationgroup': '__all__',
|
|
'order': ['change_order', 'delete_order'],
|
|
'orderarticle': '__all__',
|
|
'supplier': ['add_supplier', 'delete_supplier'],
|
|
'supplierarticle': '__all__',
|
|
'transfer': ['change_transfer', 'delete_transfer'],
|
|
'transfergroup': '__all__',
|
|
}
|
|
|
|
to_delete_q = Q()
|
|
|
|
for model_name, codenames in to_delete.items():
|
|
if codenames == '__all__':
|
|
to_delete_q |= Q(content_type__model=model_name)
|
|
else:
|
|
to_delete_q |= Q(
|
|
content_type__model=model_name,
|
|
codename__in=codenames,
|
|
)
|
|
|
|
to_delete_q &= Q(content_type__app_label='kfet')
|
|
|
|
Permission.objects.filter(to_delete_q).delete()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
"""
|
|
Data migration which performs permissions cleaning.
|
|
"""
|
|
dependencies = [
|
|
('kfet', '0062_change_models_opts'),
|
|
('auth', '0006_require_contenttypes_0002'),
|
|
('contenttypes', '0002_remove_content_type_name'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(update_permissions),
|
|
]
|