diff --git a/admin/migrations/0015_move_passwords.py b/admin/migrations/0015_move_passwords.py index 1bd697e02..6a61dc9a4 100644 --- a/admin/migrations/0015_move_passwords.py +++ b/admin/migrations/0015_move_passwords.py @@ -10,7 +10,7 @@ class Migration(DataMigration): def forwards(self, orm): "Write your forwards methods here." try: - s = Parameter.objects.get(name='PASSWORD_SCHEME').value + s = Parameter.objects.get(name='admin.PASSWORD_SCHEME').value except Parameter.DoesNotExist: s = "crypt" @@ -113,4 +113,4 @@ class Migration(DataMigration): } } - complete_apps = ['admin'] + complete_apps = ['admin', 'auth'] diff --git a/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py b/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py index 860e18ef8..e39120b91 100644 --- a/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py +++ b/admin/migrations/0016_auto__add_objectaccess__add_unique_objectaccess_user_content_type_obje.py @@ -27,21 +27,8 @@ class Migration(SchemaMigration): # Deleting field 'Mailbox.name' db.delete_column('admin_mailbox', 'name') - def backwards(self, orm): - - # Removing unique constraint on 'ObjectAccess', fields ['user', 'content_type', 'object_id'] - db.delete_unique('admin_objectaccess', ['user_id', 'content_type_id', 'object_id']) - - # Deleting model 'ObjectAccess' - db.delete_table('admin_objectaccess') - - # User chose to not deal with backwards NULL issues for 'Mailbox.password' - raise RuntimeError("Cannot reverse this migration. 'Mailbox.password' and its values cannot be restored.") - - # User chose to not deal with backwards NULL issues for 'Mailbox.name' - raise RuntimeError("Cannot reverse this migration. 'Mailbox.name' and its values cannot be restored.") - + raise RuntimeError("Cannot reverse this migration.") models = { 'admin.alias': { diff --git a/admin/migrations/0017_set_permissions.py b/admin/migrations/0017_set_permissions.py new file mode 100644 index 000000000..7bc028707 --- /dev/null +++ b/admin/migrations/0017_set_permissions.py @@ -0,0 +1,163 @@ +# 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 forwards(self, orm): + "Write your forwards methods here." + superusers = orm.User.objects.filter(is_superuser=True) + if not len(superusers): + # Empty db, nothing to do + return + + domadmins = orm.User.objects.filter(groups__name='DomainAdmins') + domains = orm.Domain.objects.all() + deferred_admin = [] + + domct = orm['contenttypes.ContentType'].objects.get( + app_label='admin', model='domain' + ) + 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 da in domadmins: + for i, su in enumerate(superusers): + objaccess = orm.ObjectAccess( + user=su, content_type=uct, object_id=da.id + ) + if i == 0: + objectaccess.is_owner=True + objaccess.save() + + dom = da.mailbox_set.all()[0].domain + objaccess = orm.ObjectAccess( + user=da, content_type=domct, object_id=dom.id, is_owner=True + ) + objaccess.save() + deferred_admin += [dom] + + for dom in domains: + for i, su in enumerate(superusers): + objaccess = orm.ObjectAccess( + user=su, content_type=domct, object_id=dom.id + ) + if not dom in deferred_admin: + objaccess.is_owner = True + objaccess.save() + + def backwards(self, orm): + "Write your backwards methods here." + + + 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']