Browse Source

HUE-2013 [metastore] Write permission instead of read permission

Remove read permission in a data migration.
Abraham Elmahrek 11 years ago
parent
commit
746f481

+ 1 - 1
apps/metastore/src/metastore/settings.py

@@ -24,5 +24,5 @@ MENU_INDEX = 20
 IS_URL_NAMESPACED = True
 
 PERMISSION_ACTIONS = (
-  ("read_only_access", "read_only_access: No DDL permitted, need the app access too."),
+  ("write", "Allow DDL operations. Need the app access too."),
 )

+ 8 - 8
apps/metastore/src/metastore/tests.py

@@ -215,14 +215,14 @@ class TestMetastoreWithHadoop(BeeswaxSampleProvider):
       assertz("Drop</button>" in response.content, response.content)
       assertz("Create a new table" in response.content, response.content)
 
-    check(client, assert_true)
+    check(client, assert_false)
 
-    # Remove access
+    # Add access
     group, created = Group.objects.get_or_create(name='write_access_frontend')
-    perm, created = HuePermission.objects.get_or_create(app='metastore', action='read_only_access')
+    perm, created = HuePermission.objects.get_or_create(app='metastore', action='write')
     GroupPermission.objects.get_or_create(group=group, hue_permission=perm)
 
-    check(client, assert_false)
+    check(client, assert_true)
 
 
   def test_has_write_access_backend(self):
@@ -242,11 +242,11 @@ class TestMetastoreWithHadoop(BeeswaxSampleProvider):
       resp = client.post('/metastore/tables/drop/default', {u'table_selection': [u'test_perm_1']}, follow=True)
       assert_equal(resp.status_code, http_code, resp.content)
 
-    check(client, 200)
+    check(client, 500)
 
-    # Remove access
+    # Add access
     group, created = Group.objects.get_or_create(name='write_access_backend')
-    perm, created = HuePermission.objects.get_or_create(app='metastore', action='read_only_access')
+    perm, created = HuePermission.objects.get_or_create(app='metastore', action='write')
     GroupPermission.objects.get_or_create(group=group, hue_permission=perm)
 
-    check(client, 500)
+    check(client, 200)

+ 2 - 2
apps/metastore/src/metastore/views.py

@@ -47,7 +47,7 @@ def check_has_write_access_permission(view_func):
   """
   def decorate(request, *args, **kwargs):
     if not has_write_access(request.user):
-      raise PopupException(_('You are not allowed to modify the metastore.'), detail=_('You have metastore:read_only_access permissions'))
+      raise PopupException(_('You are not allowed to modify the metastore.'), detail=_('You have must have metastore:write permissions'), error_code=301)
 
     return view_func(request, *args, **kwargs)
   return wraps(view_func)(decorate)
@@ -310,4 +310,4 @@ def analyze_table(request, database, table, column=None):
 
 
 def has_write_access(user):
-  return user.is_superuser or not user.has_hue_permission(action="read_only_access", app=DJANGO_APPS[0])
+  return user.is_superuser or user.has_hue_permission(action="write", app=DJANGO_APPS[0])

+ 86 - 0
apps/useradmin/src/useradmin/migrations/0003_remove_metastore_readonly_huepermission.py

@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import DataMigration
+from django.db import models
+
+class Migration(DataMigration):
+
+    def forwards(self, orm):
+        from useradmin.models import HuePermission
+        try:
+            perm = HuePermission.objects.get(app='metastore', action='read_only_access')
+            perm.delete()
+        except HuePermission.DoesNotExist:
+            pass
+
+    def backwards(self, orm):
+        perm, created = HuePermission.objects.get_or_create(app='metastore', action='read_only_access')
+
+    models = {
+        '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'})
+        },
+        'useradmin.grouppermission': {
+            'Meta': {'object_name': 'GroupPermission'},
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']"}),
+            'hue_permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['useradmin.HuePermission']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'useradmin.huepermission': {
+            'Meta': {'object_name': 'HuePermission'},
+            'action': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'app': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'through': "orm['useradmin.GroupPermission']", 'symmetrical': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'useradmin.ldapgroup': {
+            'Meta': {'object_name': 'LdapGroup'},
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'group'", 'to': "orm['auth.Group']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'useradmin.userprofile': {
+            'Meta': {'object_name': 'UserProfile'},
+            'creation_method': ('django.db.models.fields.CharField', [], {'default': "'HUE'", 'max_length': '64'}),
+            'home_directory': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'})
+        }
+    }
+
+    complete_apps = ['useradmin']
+    symmetrical = True

+ 1 - 1
apps/useradmin/src/useradmin/models.py

@@ -263,7 +263,7 @@ def update_app_permissions(**kwargs):
     if default_group:
       for new_dp in added:
         if not (new_dp.app == 'useradmin' and new_dp.action == 'access') and \
-           not (new_dp.app == 'metastore' and new_dp.action == 'read_only_access') and \
+           not (new_dp.app == 'metastore' and new_dp.action == 'write') and \
            not (new_dp.app == 'hbase' and new_dp.action == 'write'):
           GroupPermission.objects.create(group=default_group, hue_permission=new_dp)