X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fmodels%2Fuser.py;h=1afb5fcdb01e677e9231778e10789b9e863ceabe;hb=5b06147ac6515adf8c482eec417ba049f1321bf0;hp=a3b82d864b0181540d7d9b2cab5fe3eaa4d88baa;hpb=7d018caab5dd607b6050e2ba5611ac631772f67f;p=plstackapi.git diff --git a/planetstack/core/models/user.py b/planetstack/core/models/user.py index a3b82d8..1afb5fc 100644 --- a/planetstack/core/models/user.py +++ b/planetstack/core/models/user.py @@ -2,6 +2,7 @@ import os import datetime from collections import defaultdict from django.db import models +from django.db.models import F, Q from core.models import PlCoreBase,Site from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from timezones.fields import TimeZoneField @@ -130,4 +131,22 @@ class User(AbstractBaseUser): if not self.id: self.set_password(self.password) self.username = self.email - super(User, self).save(*args, **kwds) + super(User, self).save(*args, **kwds) + + @staticmethod + def select_by_user(user): + if user.is_admin: + qs = User.objects.all() + else: + # can see all users at any site where this user has pi role + from core.models.site import SitePrivilege + site_privs = SitePrivilege.objects.filter(user=user) + sites = [sp.site for sp in site_privs if sp.role.role == 'pi'] + # get site privs of users at these sites + site_privs = SitePrivilege.objects.filter(site__in=sites) + user_ids = [sp.user.id for sp in site_privs] + [user.id] + qs = User.objects.filter(Q(site__in=sites) | Q(id__in=user_ids)) + return qs + + +