# encoding: utf-8 import datetime from south.db import db from south.v2 import DataMigration from django.db import models from django.core.exceptions import ObjectDoesNotExist class Migration(DataMigration): def grant_access(self, orm, user, ct, obj, is_owner=False): objaccess = orm["admin.ObjectAccess"]( user=user, content_type=ct, object_id=obj.id ) objaccess.is_owner = is_owner objaccess.save() def forwards(self, orm): superusers = orm["auth.User"].objects.filter(is_superuser=True) if not len(superusers): # Empty db, nothing to do return # 1: all superadmins must be able to access every defined # object. (user, domain, domain alias, mailbox, alias) try: uct = orm['contenttypes.ContentType'].objects.get( app_label='admin', model='user' ) except ObjectDoesNotExist: uct = orm['contenttypes.ContentType']( name='user', app_label='admin', model='user' ) uct.save() for account in orm["admin.User"].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, uct, account, i == 0) domct = orm['contenttypes.ContentType'].objects.get( app_label='admin', model='domain' ) for dom in orm["admin.Domain"].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, domct, dom, i == 0) dalct = orm['contenttypes.ContentType'].objects.get( app_label='admin', model='domainalias' ) for domalias in orm["admin.DomainAlias"].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, dalct, domalias, i == 0) mbct = orm['contenttypes.ContentType'].objects.get( app_label='admin', model='mailbox' ) for mb in orm["admin.Mailbox"].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, mbct, mb, i == 0) alct = orm['contenttypes.ContentType'].objects.get( app_label='admin', model='alias' ) for alias in orm["admin.Alias"].objects.all(): for i, su in enumerate(superusers): self.grant_access(orm, su, alct, alias, i == 0) # 2: domain admins must have access to their domain's content for da in orm["admin.User"].objects.filter(groups__name='DomainAdmins'): dom = da.mailbox_set.all()[0].domain self.grant_access(orm, da, domct, dom) for mb in dom.mailbox_set.all(): self.grant_access(orm, da, mbct, mb) self.grant_access(orm, da, uct, mb.user) for al in dom.alias_set.all(): self.grant_access(orm, da, alct, al) def backwards(self, orm): "Write your backwards methods here." raise RuntimeError("Cannot revert this migration") models = { 'admin.alias': { 'Meta': {'object_name': 'Alias'}, 'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}), 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.ObjectDates']"}), 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}), 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'extmboxes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'mboxes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['admin.Mailbox']", 'symmetrical': 'False'}) }, 'admin.domain': { 'Meta': {'object_name': 'Domain'}, 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.ObjectDates']"}), 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), 'quota': ('django.db.models.fields.IntegerField', [], {}) }, 'admin.domainalias': { 'Meta': {'object_name': 'DomainAlias'}, 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.ObjectDates']"}), 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), 'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}) }, 'admin.extension': { 'Meta': {'object_name': 'Extension'}, 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) }, 'admin.mailbox': { 'Meta': {'object_name': 'Mailbox'}, 'address': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'dates': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.ObjectDates']"}), 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['admin.Domain']"}), 'gid': ('django.db.models.fields.IntegerField', [], {}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'path': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'quota': ('django.db.models.fields.IntegerField', [], {}), 'uid': ('django.db.models.fields.IntegerField', [], {}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) }, 'admin.objectaccess': { 'Meta': {'unique_together': "(('user', 'content_type', 'object_id'),)", 'object_name': 'ObjectAccess'}, 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) }, 'admin.objectdates': { 'Meta': {'object_name': 'ObjectDates'}, 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'last_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) }, 'admin.user': { 'Meta': {'object_name': 'User', 'db_table': "'auth_user'", '_ormbases': ['auth.User'], 'proxy': 'True'} }, 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) }, 'auth.permission': { 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'auth.user': { 'Meta': {'object_name': 'User'}, 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) }, 'contenttypes.contenttype': { 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) } } complete_apps = ['contenttypes', 'admin']