mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Make sure extensions load initial data in ALL cases.
This commit is contained in:
@@ -1,39 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import IntegrityError, models, migrations
|
||||
from django.db import models, migrations
|
||||
|
||||
from modoboa.core.extensions import exts_pool
|
||||
from modoboa.lib.migration_tools import add_permissions_to_group
|
||||
from modoboa.extensions.limits import controls
|
||||
from modoboa.extensions.limits.midels import LimitTemplates
|
||||
|
||||
|
||||
def load_initial_data(apps, schema_editor):
|
||||
"""Load initial data."""
|
||||
ContentType = apps.get_model("contenttypes", "ContentType")
|
||||
Group = apps.get_model("auth", "Group")
|
||||
User = apps.get_model("core", "User")
|
||||
Domain = apps.get_model("admin", "Domain")
|
||||
LimitsPool = apps.get_model("limits", "LimitsPool")
|
||||
Limit = apps.get_model("limits", "Limit")
|
||||
|
||||
ct = ContentType.objects.get(app_label="admin", model="domain")
|
||||
dagrp = Group.objects.get(name="DomainAdmins")
|
||||
|
||||
grp = Group(name="Resellers")
|
||||
grp.save()
|
||||
grp.permissions.add(*dagrp.permissions.all())
|
||||
|
||||
ct = ContentType.objects.get_for_model(Domain)
|
||||
add_permissions_to_group(
|
||||
apps, "Resellers", [("admin", "domain", "view_domains"),
|
||||
("admin", "domain", "add_domain"),
|
||||
("admin", "domain", "change_domain"),
|
||||
("admin", "domain", "delete_domain")]
|
||||
apps, grp, [("admin", "domain", "view_domains"),
|
||||
("admin", "domain", "add_domain"),
|
||||
("admin", "domain", "change_domain"),
|
||||
("admin", "domain", "delete_domain")]
|
||||
)
|
||||
if exts_pool.is_extension_installed(
|
||||
"modoboa.extensions.postfix_relay_domains"):
|
||||
from modoboa.extensions.postfix_relay_domains.modo_extension \
|
||||
import RESELLERS_PERMISSIONS
|
||||
add_permissions_to_group(apps, grp, RESELLERS_PERMISSIONS)
|
||||
|
||||
for user in User.objects.filter(groups__name='DomainAdmins'):
|
||||
try:
|
||||
controls.create_pool(user)
|
||||
except IntegrityError:
|
||||
pass
|
||||
for user in User.objects.filter(groups__name="DomainAdmins"):
|
||||
pool, created = LimitsPool.objects.get_or_create(user=user)
|
||||
for tpl in LimitTemplates().templates():
|
||||
Limit.objects.create(name=tpl[0], pool=pool, maxvalue=0)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
@@ -4,6 +4,9 @@ from __future__ import unicode_literals
|
||||
from django.db import models, migrations
|
||||
|
||||
from modoboa.core.extensions import exts_pool
|
||||
from modoboa.lib.migration_tools import add_permissions_to_group
|
||||
|
||||
from ..modo_extension import RESELLERS_PERMISSIONS
|
||||
|
||||
|
||||
def load_initial_data(apps, schema_editor):
|
||||
@@ -16,11 +19,6 @@ def load_initial_data(apps, schema_editor):
|
||||
return
|
||||
|
||||
Group = apps.get_model("auth", "Group")
|
||||
Permission = apps.get_model("auth", "Permission")
|
||||
ContentType = apps.get_model("contenttypes", "ContentType")
|
||||
RelayDomain = apps.get_model("postfix_relay_domains", "RelayDomain")
|
||||
RelayDomainAlias = apps.get_model(
|
||||
"postfix_relay_domains", "RelayDomainAlias")
|
||||
LimitsPool = apps.get_model("limits", "LimitsPool")
|
||||
Limit = apps.get_model("limits", "Limit")
|
||||
|
||||
@@ -33,17 +31,7 @@ def load_initial_data(apps, schema_editor):
|
||||
|
||||
# Add new permissions to the Resellers group.
|
||||
grp = Group.objects.get(name='Resellers')
|
||||
for model in [RelayDomain, RelayDomainAlias, Service]:
|
||||
ct = ContentType.objects.get_for_model(model)
|
||||
name = model.__name__.lower()
|
||||
for action in ['add', 'change', 'delete']:
|
||||
grp.permissions.add(
|
||||
Permission.objects.get(
|
||||
content_type=ct, codename='%s_%s' % (action, name)
|
||||
)
|
||||
)
|
||||
grp.save()
|
||||
|
||||
add_permissions_to_group(apps, grp, RESELLERS_PERMISSIONS)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
@@ -18,6 +18,19 @@ EXTENSION_EVENTS = [
|
||||
"FillRelayDomainInstances"
|
||||
]
|
||||
|
||||
RESELLERS_PERMISSIONS = [
|
||||
("postfix_relay_domains", "relaydomain", "add_relaydomain"),
|
||||
("postfix_relay_domains", "relaydomain", "change_relaydomain"),
|
||||
("postfix_relay_domains", "relaydomain", "delete_relaydomain"),
|
||||
("postfix_relay_domains", "relaydomainalias", "add_relaydomainalias"),
|
||||
("postfix_relay_domains", "relaydomainalias", "change_relaydomainalias"),
|
||||
("postfix_relay_domains", "relaydomainalias", "delete_relaydomainalias"),
|
||||
("postfix_relay_domains", "service", "add_service"),
|
||||
("postfix_relay_domains", "service", "change_service"),
|
||||
("postfix_relay_domains", "service", "delete_service")
|
||||
]
|
||||
|
||||
|
||||
class PostfixRelayDomains(ModoExtension):
|
||||
|
||||
"""Extension declaration."""
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# coding: utf-8
|
||||
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.db import IntegrityError
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from modoboa.core.models import ObjectAccess, User
|
||||
from modoboa.lib import events
|
||||
|
||||
|
||||
Reference in New Issue
Block a user