role based filtering for keys
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 10 May 2013 01:44:17 +0000 (21:44 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 10 May 2013 01:44:17 +0000 (21:44 -0400)
plstackapi/core/admin.py
plstackapi/core/models/pluser.py

index 2365225..2ddc73b 100644 (file)
@@ -181,13 +181,13 @@ class KeyAdmin(OSModelAdmin):
     ]
     list_display = ['key', 'type', 'blacklisted', 'user']
 
-    def get_queryset(self, request):
-        # get keys user is allowed to see
-        qs = super(KeyAdmin, self).get_queryset(request)
-        if request.user.is_superuser:
-            return qs
-        # users can only see their own keys
-        return qs.filter(user=request.user)  
+    def queryset(self, request):
+        # admins can see all keys. Users can only see their own key.
+        if request.user.is_admin:
+            qs = super(KeyAdmin, self).queryset(request) 
+        else:
+            qs = Key.objects.filter(user=request.user)
+        return qs 
         
 class SliceAdmin(OSModelAdmin):
     fields = ['name', 'site', 'serviceClass', 'description', 'slice_url']
index 6688cfe..d51572b 100644 (file)
@@ -1,5 +1,6 @@
 import os
 import datetime
+from collections import defaultdict
 from django.db import models
 from plstackapi.core.models import PlCoreBase
 from plstackapi.core.models import Site
@@ -93,6 +94,19 @@ class PLUser(AbstractBaseUser):
         # Simplest possible answer: Yes, always
         return True
 
+    def get_roles(self):
+        from plstackapi.core.models.site import SitePrivilege
+        from plstackapi.core.models.slice import SliceMembership
+
+        site_privileges = SitePrivilege.objects.filter(user=self)
+        slice_memberships = SliceMembership.objects.filter(user=self)
+        roles = defaultdict(list)
+        for site_privilege in site_privileges:
+            roles[site_privilege.site.login_base].append(site_privilege.role.role_type)
+        for slice_membership in slice_memberships:
+            roles[slice_membership.slice.name].append(slice_membership.role.role_type)
+        return roles   
+
     def save(self, *args, **kwds):
         if not hasattr(self, 'os_manager'):
             setattr(self, 'os_manager', OpenStackManager())