diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-04-14 17:10:59 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-04-14 17:10:59 +0200 | 
| commit | 2909387bd0ad10984fb7d2a6ab2762b42ed8742b (patch) | |
| tree | 89e364e908d9e6d0137a6d13cc5fc80fe05835b5 /ishtar_common/management/commands/import_access_controls.py | |
| parent | c1a6fc2032c98468eb96dfa9080bf2ba0b7e4e70 (diff) | |
| parent | 7042090ca5122fc12217663a1a0a92ff87399226 (diff) | |
| download | Ishtar-2909387bd0ad10984fb7d2a6ab2762b42ed8742b.tar.bz2 Ishtar-2909387bd0ad10984fb7d2a6ab2762b42ed8742b.zip | |
Merge branch 'master' into develop
Diffstat (limited to 'ishtar_common/management/commands/import_access_controls.py')
| -rw-r--r-- | ishtar_common/management/commands/import_access_controls.py | 106 | 
1 files changed, 106 insertions, 0 deletions
| diff --git a/ishtar_common/management/commands/import_access_controls.py b/ishtar_common/management/commands/import_access_controls.py new file mode 100644 index 000000000..62692485d --- /dev/null +++ b/ishtar_common/management/commands/import_access_controls.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2017  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +import json + +from django.core.management.base import BaseCommand + +from django.contrib.auth.models import Permission, Group +from django.contrib.contenttypes.models import ContentType + +from ishtar_common.models import PersonType + +class Command(BaseCommand): +    args = '<access control file>' +    help = 'Import access controls' + +    def handle(self, *args, **options): +        f = open(args[0]) +        data = json.loads(f.read()) + +        res = {'content_types': {}, +               'permissions': {}, +               'groups': {}, +               'person_types': {} +        } +        for content_type in data['content_types']: +            q = ContentType.objects.filter( +                app_label=content_type['app_label'], +                model=content_type['model']) +            if not q.count(): +                ct = ContentType.objects.create( +                    app_label=content_type['app_label'], +                    model=content_type['model'], +                    name=content_type['name'] +                ) +                print("created", ct) +            else: +                ct = q.all()[0] +            res['content_types'][(ct.app_label, +                                  ct.model)] = ct + +        for perm in data['permissions']: +            app_label, model = perm['content_type'] +            q = Permission.objects.filter( +                codename=perm['codename'], +                content_type__app_label=app_label, +                content_type__model= model +            ) +            if q.count(): +                p = q.all()[0] +            else: +                p = Permission.objects.create( +                    name=perm['name'], codename=perm['codename'], +                    content_type=res['content_types'][(app_label, model)]) +                print("created", p) +            res['permissions'][perm['codename']] = p + +        for gp in data['groups']: +            q = Group.objects.filter(name=gp['name']) +            if q.count(): +                g = q.all()[0] +            else: +                g = Group.objects.create(name=gp['name']) +                print("created", g) +            res['groups'][gp['name']] = g +            g.permissions.clear() + +        for gperm in data['group_perms']: +            g = res['groups'][gperm['group']] +            g.permissions.add(res['permissions'][gperm['permission']]) + +        for pt in data['person_types']: +            q = PersonType.objects.filter(txt_idx=pt['txt_idx']) +            if q.count(): +                pt = q.all()[0] +            else: +                pt = PersonType.objects.create( +                    label=pt['label'], +                    txt_idx=pt['txt_idx'], +                    comment=pt['comment'], +                    available=pt['available'] +                ) +                print("created", pt) +            res['person_types'][pt.txt_idx] = pt +            pt.groups.clear() + +        for ptgp in data['person_type_groups']: +            pt = res['person_types'][ptgp['person_type']] +            gp = res['groups'][ptgp['group']] +            pt.groups.add(gp) | 
