diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-01-23 21:29:45 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-01-23 21:29:45 +0100 | 
| commit | 924f470f4e137b1b178e852ec30bffce01aaad24 (patch) | |
| tree | ca0b61f08df232710939e74e7ea990a833b7f54a /chimere/admin.py | |
| parent | 2803c855bbfd758d050d7e8c33bbbc220d38c252 (diff) | |
| download | Chimère-924f470f4e137b1b178e852ec30bffce01aaad24.tar.bz2 Chimère-924f470f4e137b1b178e852ec30bffce01aaad24.zip  | |
Limit moderation by category: limit in admin pages - tests
Diffstat (limited to 'chimere/admin.py')
| -rw-r--r-- | chimere/admin.py | 34 | 
1 files changed, 22 insertions, 12 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 5a95ece..fb3b15c 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -231,6 +231,25 @@ class HasCategoriesListFilter(SimpleListFilter):              return queryset.exclude(categories__isnull=True)          return queryset + +def moderator_right(user, qs, geo_type='marker'): +    if user.is_superuser: +        return qs +    areas = get_areas_for_user(user) +    if areas: +        contained = Q() +        for area in areas: +            if geo_type == 'marker': +                contained = contained | area.getIncludeMarker() +            elif geo_type == 'route': +                contained = contained | area.getIncludeRoute() +        qs = qs.filter(contained) +    if user.subcategory_limit_to.count(): +        qs = qs.filter(categories__in=SubCategory.objects.filter( +            limited_for_user__user=user).all()) +    return qs + +  class MarkerAdmin(admin.ModelAdmin):      """      Specialized the Point field. @@ -283,12 +302,7 @@ class MarkerAdmin(admin.ModelAdmin):      def queryset(self, request):          qs = self.model._default_manager.get_query_set() -        if not request.user.is_superuser: -            areas = get_areas_for_user(request.user) -            contained = Q() -            for area in areas: -                contained = contained | area.getIncludeMarker() -            qs = qs.filter(contained) +        qs = moderator_right(request.user, qs, geo_type='marker')          ordering = self.ordering or ()          if ordering:              qs = qs.order_by(*ordering) @@ -311,6 +325,7 @@ class MarkerAdmin(admin.ModelAdmin):          )          return my_urls + urls +  class RouteAdmin(MarkerAdmin):      """      Specialized the Route field. @@ -348,12 +363,7 @@ class RouteAdmin(MarkerAdmin):      def queryset(self, request):          qs = self.model._default_manager.get_query_set() -        if not request.user.is_superuser: -            areas = get_areas_for_user(request.user) -            contained = Q() -            for area in areas: -                contained = contained | area.getIncludeRoute() -            qs = qs.filter(contained) +        qs = moderator_right(request.user, qs, geo_type='route')          ordering = self.ordering or ()          if ordering:              qs = qs.order_by(*ordering)  | 
