diff --git a/irods-basicGUI/irodsTreeView.py b/irods-basicGUI/irodsTreeView.py index 6330e18214f117c681533be1d9481791eb831302..2fa63032dfcf73003c9d78a73a53aad4f3c9a28d 100644 --- a/irods-basicGUI/irodsTreeView.py +++ b/irods-basicGUI/irodsTreeView.py @@ -19,6 +19,9 @@ class IrodsModel(QStandardItemModel): super(IrodsModel, self).__init__(parent) self._checked_indeces = set() self.ic = irods_session + #Groups which the user id member of to check access rights on tree + self.userGroups = self.ic.getUserInfo()[1] + self.irodsRootColl = "/" + self.ic.session.zone self.TreeView = TreeView self.clear() # Empty tree @@ -39,13 +42,22 @@ class IrodsModel(QStandardItemModel): def setData(self, index, value, role=Qt.EditRole): + + if role == Qt.CheckStateRole: - #filename = self.data(index) if value == Qt.Checked: + #check irods ACLs for access rights + path = self.irodsPathFromTreeIdx(index) + reqAcls = [('own', path, group, self.ic.session.zone) for group in self.userGroups] + reqAcls.extend([('write', path, group, self.ic.session.zone) \ + for group in self.userGroups]) + + acls = set([(acl.access_name, acl.path, acl.user_name, acl.user_zone) + for acl in self.ic.getPermissions(path)]) # Block checking of home item (found no easy way to remove the checkbox) - if self.data(index) == "home": - message = "Cannot up/download to home collection" - QMessageBox.information(self.TreeView,'Error', message) + if acls.intersection(reqAcls) == set(): + message = "ERROR, insufficient rights:\nCannot select "+path + QMessageBox.information(self.TreeView, 'Error', message) #logging.info("Filedownload:" + message) return False @@ -203,6 +215,19 @@ class IrodsModel(QStandardItemModel): seen[irodsID] = parent.child(parent.rowCount() - 1) + def getParentIdx(self, position): + try: #index when right mouse click + modelIndex = self.tree.indexAt(position) + if not modelIndex.isValid(): + return + except: #index when expand is clicked + modelIndex = position + + + treeItem = self.itemFromIndex(modelIndex) + parent = treeItem.parent() + + def refreshSubTree(self, position): try: #index when right mouse click modelIndex = self.tree.indexAt(position)