浏览代码

HUE-8530 [organization] Permission model pointing to a Connector

Romain 5 年之前
父节点
当前提交
e6155013b7

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

@@ -199,6 +199,8 @@ class GroupPermission(models.Model):
 
 
 
 
 if ENABLE_ORGANIZATIONS.get():
 if ENABLE_ORGANIZATIONS.get():
+  from desktop.lib.connectors.models import Connector
+
   class OrganizationHuePermissionManager(models.Manager):
   class OrganizationHuePermissionManager(models.Manager):
 
 
     def get_queryset(self):
     def get_queryset(self):
@@ -209,7 +211,7 @@ if ENABLE_ORGANIZATIONS.get():
 
 
   # TODO: move to external abstract module?
   # TODO: move to external abstract module?
   class OrganizationHuePermission(models.Model):
   class OrganizationHuePermission(models.Model):
-    app = models.CharField(max_length=30)   # FK to Connector?
+    connector = models.ForeignKey(Connector)
     action = models.CharField(max_length=100)
     action = models.CharField(max_length=100)
     description = models.CharField(max_length=255)
     description = models.CharField(max_length=255)
 
 
@@ -234,6 +236,9 @@ if ENABLE_ORGANIZATIONS.get():
 
 
     class Meta(object):
     class Meta(object):
       abstract = True
       abstract = True
+      verbose_name = _t('Hue permission')
+      verbose_name_plural = _t('Hue permissions')
+      unique_together = ('connector', 'action', 'organization',)
 
 
   class HuePermission(OrganizationHuePermission):
   class HuePermission(OrganizationHuePermission):
     pass
     pass

+ 2 - 2
desktop/core/src/desktop/lib/connectors/models.py

@@ -36,7 +36,7 @@ LOG = logging.getLogger(__name__)
 class ConnectorManager(models.Manager):
 class ConnectorManager(models.Manager):
 
 
   def get_queryset(self):
   def get_queryset(self):
-    """Make sure to restrict to only organization's connectors"""
+    """Restrict to only organization's connectors"""
     queryset = super(ConnectorManager, self).get_queryset()
     queryset = super(ConnectorManager, self).get_queryset()
     return _fitered_queryset(queryset)
     return _fitered_queryset(queryset)
 
 
@@ -46,7 +46,7 @@ class ConnectorManager(models.Manager):
 
 
 class Connector(models.Model):
 class Connector(models.Model):
   """
   """
-  Instance of a connector pointing to an external service: connection
+  Instance of a connector type pointing to an external service of a certain dialect.
   """
   """
   name = models.CharField(default='', max_length=255)
   name = models.CharField(default='', max_length=255)
   description = models.TextField(default='')
   description = models.TextField(default='')

+ 3 - 5
desktop/core/src/desktop/templates/connectors/connectors.mako

@@ -43,12 +43,12 @@ else:
       self.categories = ko.observableArray();
       self.categories = ko.observableArray();
       self.selectedConnectorCategory = ko.observable('All');
       self.selectedConnectorCategory = ko.observable('All');
       self.connectorsFilter = ko.observable();
       self.connectorsFilter = ko.observable();
-      self.aggregateConnectors = ko.observable(false);
 
 
-      self.instances = ko.observableArray(); // Saved connectors
+      // Handle two types of objects are being listed: connector instances and types
+      self.instances = ko.observableArray(); // Connector instances (e.g. connector to a MySql DB on a certain host)
       self.instance = ko.observable();
       self.instance = ko.observable();
 
 
-      self.connectors = ko.observableArray(); // Connector forms
+      self.connectors = ko.observableArray(); // Connector types (e.g. mysql dialect)
       self.connector = ko.observable();
       self.connector = ko.observable();
 
 
       self.selectedConnectors = ko.pureComputed(function () {
       self.selectedConnectors = ko.pureComputed(function () {
@@ -229,8 +229,6 @@ ${ layout.menubar(section='connectors') }
               <i class="fa fa-question-circle"></i> ${ _('Help') }
               <i class="fa fa-question-circle"></i> ${ _('Help') }
             </a>
             </a>
           </span>
           </span>
-          <label for="groupConnector" class="pull-right">${ _('Group') }</label>
-          <input type="checkbox" name="groupConnector" data-bind="checked: $root.aggregateConnectors" class="pull-right">
           <input type="text" data-bind="clearable: $root.connectorsFilter, valueUpdate: 'afterkeydown'"
           <input type="text" data-bind="clearable: $root.connectorsFilter, valueUpdate: 'afterkeydown'"
               class="input-xlarge pull-right margin-bottom-10" placeholder="${ _('Filter...') }">
               class="input-xlarge pull-right margin-bottom-10" placeholder="${ _('Filter...') }">
         </div>
         </div>