@@ -351,6 +351,14 @@ def create_context_menu(self, item):
351
351
if data ['type' ] == 'nodes' :
352
352
return None
353
353
354
+ user_has_write_permissions = False
355
+ try :
356
+ user_has_write_permissions = "write" in \
357
+ data ["attributes" ]["current_user_permissions" ]
358
+ except AttributeError as e :
359
+ raise osf .OSFInvalidResponse ('Could not retrieve permission info: '
360
+ '{}' .format (e ))
361
+
354
362
if data ['type' ] == 'files' :
355
363
kind = data ["attributes" ]["kind" ]
356
364
@@ -364,23 +372,31 @@ def create_context_menu(self, item):
364
372
365
373
menu = QtWidgets .QMenu (self .tree )
366
374
367
- # Actions only allowd on files
375
+ # Actions only allowed on files
368
376
if kind == "file" :
369
377
menu .addAction (self .download_icon , _ (u"Download file" ),
370
378
self ._clicked_download_file )
371
379
372
380
# Actions only allowed on folders
373
381
if kind == "folder" :
374
- menu .addAction (self .upload_icon , _ (u"Upload file to folder" ),
382
+ upload_action = menu .addAction (self .upload_icon , _ (u"Upload file to folder" ),
375
383
self .__clicked_upload_file )
376
- menu .addAction (self .new_folder_icon , _ (u"Create new folder" ),
384
+ newfolder_action = menu .addAction (self .new_folder_icon , _ (u"Create new folder" ),
377
385
self .__clicked_new_folder )
378
386
menu .addAction (self .refresh_icon , _ (u"Refresh contents" ),
379
387
self .__clicked_partial_refresh )
380
388
389
+ if not user_has_write_permissions :
390
+ upload_action .setDisabled (True )
391
+ newfolder_action .setDisabled (True )
392
+
381
393
# Only allow deletion of files and subfolders of repos
382
394
if kind == "file" or not item_is_repo :
383
- menu .addAction (self .delete_icon , _ (u"Delete" ), self .__clicked_delete )
395
+ delete_action = menu .addAction (self .delete_icon , _ (u"Delete" ),
396
+ self .__clicked_delete )
397
+
398
+ if not user_has_write_permissions :
399
+ delete_action .setDisabled (True )
384
400
385
401
return menu
386
402
@@ -572,7 +588,11 @@ def set_folder_properties(self, data):
572
588
level = "Public"
573
589
else :
574
590
level = "Private"
575
- self .properties ["Type" ][1 ].setText (level + " " + attributes ["category" ])
591
+ access_level = ""
592
+ if not "write" in attributes ["current_user_permissions" ]:
593
+ access_level = " (read only)"
594
+ self .properties ["Type" ][1 ].setText (level + " " + \
595
+ attributes ["category" ] + access_level )
576
596
elif "name" in attributes and "kind" in attributes :
577
597
self .properties ["Name" ][1 ].setText (attributes ["name" ])
578
598
self .properties ["Type" ][1 ].setText (attributes ["kind" ])
@@ -700,36 +720,52 @@ def __slot_currentItemChanged(self, item, col):
700
720
self .abort_preview .emit ()
701
721
702
722
data = item .data (0 , QtCore .Qt .UserRole )
723
+
724
+ user_has_write_permissions = "write" in \
725
+ data ["attributes" ]["current_user_permissions" ]
726
+
703
727
if data ['type' ] == 'nodes' :
704
728
name = data ["attributes" ]["title" ]
705
- if data [ "attributes" ][ "public" ] :
706
- access = "public "
729
+ if not user_has_write_permissions :
730
+ kind = "readonly " + data [ "attributes" ][ "category" ]
707
731
else :
708
- access = "private "
709
- kind = access + data ["attributes" ]["category" ]
732
+ if data ["attributes" ]["public" ]:
733
+ access = "public "
734
+ else :
735
+ access = "private "
736
+ kind = access + data ["attributes" ]["category" ]
710
737
if data ['type' ] == 'files' :
711
738
name = data ["attributes" ]["name" ]
712
739
kind = data ["attributes" ]["kind" ]
713
740
714
741
pm = self .tree .get_icon (kind , name ).pixmap (self .preview_size )
715
742
self .image_space .setPixmap (pm )
716
743
717
- if kind == "file" :
744
+ if kind == "file" :
718
745
self .set_file_properties (data )
719
746
self .download_button .setDisabled (False )
720
747
self .upload_button .setDisabled (True )
721
- self .delete_button .setDisabled (False )
722
748
self .new_folder_button .setDisabled (True )
749
+ if user_has_write_permissions :
750
+ self .delete_button .setDisabled (False )
751
+ else :
752
+ self .delete_button .setDisabled (True )
753
+
723
754
elif kind == "folder" :
724
755
self .set_folder_properties (data )
725
- self .new_folder_button .setDisabled (False )
756
+ if user_has_write_permissions :
757
+ self .new_folder_button .setDisabled (False )
758
+ self .upload_button .setDisabled (False )
759
+ else :
760
+ self .new_folder_button .setDisabled (True )
761
+ self .upload_button .setDisabled (True )
762
+
726
763
self .download_button .setDisabled (True )
727
- self .upload_button .setDisabled (False )
728
764
# Check if the parent node is a project
729
765
# If so the current 'folder' must be a storage provider (e.g. dropbox)
730
766
# which should not be allowed to be deleted.
731
767
parent_data = item .parent ().data (0 , QtCore .Qt .UserRole )
732
- if parent_data ['type' ] == 'nodes' :
768
+ if parent_data ['type' ] == 'nodes' or not user_has_write_permissions :
733
769
self .delete_button .setDisabled (True )
734
770
else :
735
771
self .delete_button .setDisabled (False )
0 commit comments