فهرست منبع

HUE-8530 [organization] Initial permission support

Romain 5 سال پیش
والد
کامیت
ec58efa377
2فایلهای تغییر یافته به همراه49 افزوده شده و 18 حذف شده
  1. 25 17
      apps/useradmin/src/useradmin/models.py
  2. 24 1
      apps/useradmin/src/useradmin/models2.py

+ 25 - 17
apps/useradmin/src/useradmin/models.py

@@ -63,7 +63,7 @@ from useradmin.conf import DEFAULT_USER_GROUP
 
 if ENABLE_ORGANIZATIONS.get():
   from useradmin.models2 import OrganizationUser as User, OrganizationGroup as Group, Organization, default_organization, get_organization, \
-      _fitered_queryset
+      _fitered_queryset, OrganizationHuePermission as HuePermission
 else:
   from django.contrib.auth.models import User, Group
   class Organization(): pass
@@ -197,25 +197,26 @@ class GroupPermission(models.Model):
   hue_permission = models.ForeignKey("HuePermission")
 
 
-class HuePermission(models.Model):
-  """
-  Set of non-object specific permissions that an app supports.
+if not ENABLE_ORGANIZATIONS.get():
+  class HuePermission(models.Model):
+    """
+    Set of non-object specific permissions that an app supports.
 
-  Currently only assign permissions to groups (not users or roles).
-  Could be move to support Apache Ranger permissions, AWS IAM... for Hue and connector access.
-  """
-  app = models.CharField(max_length=30)
-  action = models.CharField(max_length=100)
-  description = models.CharField(max_length=255)
+    Currently only assign permissions to groups (not users or roles).
+    Could be move to support Apache Ranger permissions, AWS IAM... for Hue and connector access.
+    """
+    app = models.CharField(max_length=30)
+    action = models.CharField(max_length=100)
+    description = models.CharField(max_length=255)
 
-  groups = models.ManyToManyField(Group, through=GroupPermission)
+    groups = models.ManyToManyField(Group, through=GroupPermission)
 
-  def __str__(self):
-    return "%s.%s:%s(%d)" % (self.app, self.action, self.description, self.pk)
+    def __str__(self):
+      return "%s.%s:%s(%d)" % (self.app, self.action, self.description, self.pk)
 
-  @classmethod
-  def get_app_permission(cls, hue_app, action):
-    return HuePermission.objects.get(app=hue_app, action=action)
+    @classmethod
+    def get_app_permission(cls, hue_app, action):
+      return HuePermission.objects.get(app=hue_app, action=action)
 
 
 def get_default_user_group(**kwargs):
@@ -302,7 +303,14 @@ def update_app_permissions(**kwargs):
           else:
             uptodate += 1
         else:
-          new_dp = HuePermission(app=app_name, action=action, description=description)
+          attributes = {
+            'app': app_name,
+            'action': action,
+            'description': description
+          }
+          if kwargs.get('organization'):
+            attributes['organization'] = kwargs['organization']
+          new_dp = HuePermission(**attributes)
           new_dp.save()
           added.append(new_dp)
 

+ 24 - 1
apps/useradmin/src/useradmin/models2.py

@@ -23,6 +23,8 @@ from django.contrib.auth.models import models, AbstractUser, BaseUserManager
 from django.utils.functional import SimpleLazyObject
 from django.utils.translation import ugettext_lazy as _t
 
+from useradmin.models import HuePermission
+
 
 LOG = logging.getLogger(__name__)
 
@@ -53,6 +55,7 @@ def uuid_default():
   return str(uuid.uuid4())
 
 
+
 class OrganizationManager(models.Manager):
   use_in_migrations = True
 
@@ -190,7 +193,27 @@ class OrganizationUser(AbstractUser):
     pass
 
 
-def _fitered_queryset(queryset, by_owner=False):
+class OrganizationHuePermissionManager(models.Manager):
+
+  def get_queryset(self):
+    """Make sure to restrict to only organization"""
+    queryset = super(HuePermissionManager, self).get_queryset()
+    return _fitered_queryset(queryset)
+
+
+class OrganizationHuePermission(HuePermission):
+
+  organization = models.ForeignKey(Organization)
+
+  objects = OrganizationHuePermissionManager()
+
+  def __init__(self):
+    super(OrganizationGroupManager, self)
+  OrganizationHuePermission
+  HuePermission
+
+
+def _fitered_queryset(queryset, by_owner=False, by_group):
   request = CrequestMiddleware.get_request()
 
   if request and hasattr(request, 'user') and type(request.user._wrapped) is not object:  # Avoid infinite recursion