+ def has_add_permission(self, request, obj=None):
+ return (not self.__user_is_readonly(request))
+
+ def has_delete_permission(self, request, obj=None):
+ return (not self.__user_is_readonly(request))
+
+ def get_actions(self,request):
+ actions = super(UserAdmin,self).get_actions(request)
+
+ if self.__user_is_readonly(request):
+ if 'delete_selected' in actions:
+ del actions['delete_selected']
+
+ return actions
+
+ def change_view(self,request,object_id, extra_context=None):
+
+ if self.__user_is_readonly(request):
+ if not hasattr(self, "readonly_save"):
+ # save the original readonly fields\r
+ self.readonly_save = self.readonly_fields\r
+ self.inlines_save = self.inlines
+ self.readonly_fields=self.user_readonly_fields
+ self.inlines = self.user_readonly_inlines
+ else:
+ if hasattr(self, "readonly_save"):\r
+ # restore the original readonly fields\r
+ self.readonly_fields = self.readonly_save\r
+ self.inlines = self.inlines_save
+
+ try:
+ return super(UserAdmin, self).change_view(request, object_id, extra_context=extra_context)
+ except PermissionDenied:
+ pass
+ if request.method == 'POST':
+ raise PermissionDenied
+ request.readonly = True
+ return super(UserAdmin, self).change_view(request, object_id, extra_context=extra_context)
+
+ def __user_is_readonly(self, request):
+ #groups = [x.name for x in request.user.groups.all() ]
+ #return "readonly" in groups
+ return request.user.isReadOnlyUser()
+
+ def queryset(self, request):
+ return User.select_by_user(request.user)
+
+class DashboardViewAdmin(PlanetStackBaseAdmin):
+ fieldsets = [('Dashboard View Details',
+ {'fields': ['name', 'url'],
+ 'classes': ['suit-tab suit-tab-general']})
+ ]
+
+ suit_form_tabs =(('general','Dashboard View Details'),)
+
+class ServiceResourceROInline(ReadOnlyTabularInline):
+ model = ServiceResource
+ extra = 0
+ fields = ['serviceClass', 'name', 'maxUnitsDeployment', 'maxUnitsNode', 'maxDuration', 'bucketInRate', 'bucketMaxSize', 'cost', 'calendarReservable']
+
+class ServiceResourceInline(PlStackTabularInline):