From c14de8f27621434dd8638403dc363d46c827d720 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 9 May 2013 21:44:17 -0400 Subject: [PATCH] role based filtering for keys --- plstackapi/core/admin.py | 14 +++++++------- plstackapi/core/models/pluser.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py index 2365225..2ddc73b 100644 --- a/plstackapi/core/admin.py +++ b/plstackapi/core/admin.py @@ -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'] diff --git a/plstackapi/core/models/pluser.py b/plstackapi/core/models/pluser.py index 6688cfe..d51572b 100644 --- a/plstackapi/core/models/pluser.py +++ b/plstackapi/core/models/pluser.py @@ -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()) -- 2.47.0