Bladeren bron

[doc2] Connect permissions to Document2

Romain Rigaux 10 jaren geleden
bovenliggende
commit
2a6e41b

+ 32 - 2
desktop/core/src/desktop/api2.py

@@ -96,10 +96,40 @@ def get_document(request):
   else:
     doc = Document2.objects.get(uuid=request.GET['uuid'])
 
-#   response = _massage_doc_for_json(doc, request.user, with_data=request.GET.get('with_data'))
 
-  return JsonResponse(doc.to_dict())
 
+  permissions = _massage_permissions(doc)
+
+
+  doc_info = doc.to_dict()
+  doc_info.update(permissions)
+
+#   response = _massage_doc_for_json(doc, request.user, with_data=request.GET.get('with_data'))
+#   return JsonResponse(response)
+  return JsonResponse(doc_info)
+
+def _massage_permissions(document):
+  """
+  Returns the permissions for a given document as a dictionary
+  """
+  read_perms = document.list_permissions(perm='read')
+  write_perms = document.list_permissions(perm='write')
+  return {
+    'perms': {
+        'read': {
+          'users': [{'id': perm_user.id, 'username': perm_user.username} \
+                     for perm_user in read_perms.users.all()],
+          'groups': [{'id': perm_group.id, 'name': perm_group.name} \
+                     for perm_group in read_perms.groups.all()]
+        },
+        'write': {
+          'users': [{'id': perm_user.id, 'username': perm_user.username} \
+                     for perm_user in write_perms.users.all()],
+          'groups': [{'id': perm_group.id, 'name': perm_group.name} \
+                     for perm_group in write_perms.groups.all()]
+        }
+      }
+    }
 
 @api_error_handler
 @require_POST

+ 4 - 0
desktop/core/src/desktop/models.py

@@ -921,6 +921,10 @@ class Document2(models.Model):
     if not users and not groups:
       perm.delete()
 
+  def list_permissions(self, perm='read'):
+    perm, created = Document2Permission.objects.get_or_create(doc=self, perms=perm)
+    return perm
+
 
 class Directory(Document2):
   # e.g. name = '/' or '/dir1/dir2/f3'

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/share2.vm.js

@@ -33,7 +33,7 @@ function ShareViewModel(updateDocF) {
   self.setDocId = function(docId) {
     if (docId == -1) { return false; }
     $.get('/desktop/api2/doc/get', { id : docId }, function (data) {
-      shareViewModel.selectedDoc(data)
+      shareViewModel.selectedDoc(data);
     }).fail(function (response) {
       $(document).trigger("error", "There was an error processing your action: " + response.responseText);
     });

+ 1 - 1
desktop/core/src/desktop/templates/home2.mako

@@ -221,7 +221,7 @@ ${ commonshare2() | n,unicode }
 
 
 <script type="text/javascript" charset="utf-8">
-  var viewModel, shareViewModel, JSON_USERS_GROUPS;
+  var viewModel, shareViewModel;
 
   $(document).ready(function() {
     viewModel = new HomeViewModel();