Loading lib/galaxy/managers/folders.py +16 −10 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ from dataclasses import dataclass from typing import ( List, Optional, Set, Tuple, Union, ) Loading Loading @@ -49,6 +50,7 @@ from galaxy.model import ( LibraryFolderPermissions, ) from galaxy.model.base import transaction from galaxy.model.db.role import get_private_role_user_emails_dict from galaxy.model.scoped_session import galaxy_scoped_session from galaxy.schema.schema import LibraryFolderContentsIndexQueryPayload from galaxy.security import RBACAgent Loading Loading @@ -295,6 +297,8 @@ class FolderManager: :returns: dict of current roles for all available permission types :rtype: dictionary """ private_role_emails = get_private_role_user_emails_dict(trans.sa_session) # Omit duplicated roles by converting to set modify_roles = set( trans.app.security_agent.get_roles_for_action( Loading @@ -312,17 +316,19 @@ class FolderManager: ) ) modify_folder_role_list = [ (modify_role.name, trans.security.encode_id(modify_role.id)) for modify_role in modify_roles ] manage_folder_role_list = [ (manage_role.name, trans.security.encode_id(manage_role.id)) for manage_role in manage_roles ] add_library_item_role_list = [(add_role.name, trans.security.encode_id(add_role.id)) for add_role in add_roles] def make_tuples(roles: Set): tuples = [] for role in roles: # use role name for non-private roles, and user.email from private rules displayed_name = private_role_emails.get(role.id, role.name) role_tuple = (displayed_name, trans.security.encode_id(role.id)) tuples.append(role_tuple) return tuples return dict( modify_folder_role_list=modify_folder_role_list, manage_folder_role_list=manage_folder_role_list, add_library_item_role_list=add_library_item_role_list, modify_folder_role_list=make_tuples(modify_roles), manage_folder_role_list=make_tuples(manage_roles), add_library_item_role_list=make_tuples(add_roles), ) def can_add_item(self, trans, folder): Loading lib/galaxy/webapps/galaxy/services/library_folders.py +5 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ from galaxy.exceptions import ( ) from galaxy.managers.folders import FolderManager from galaxy.managers.roles import RoleManager from galaxy.model.db.role import get_private_role_user_emails_dict from galaxy.schema.fields import LibraryFolderDatabaseIdField from galaxy.schema.schema import ( BasicRoleModel, Loading Loading @@ -114,9 +115,12 @@ class LibraryFoldersService(ServiceBase): # Return roles that are available to select. elif scope == LibraryPermissionScope.available: roles, total_roles = trans.app.security_agent.get_valid_roles(trans, folder, query, page, page_limit) private_role_emails = get_private_role_user_emails_dict(trans.sa_session) return_roles = [] for role in roles: return_roles.append(BasicRoleModel(id=role.id, name=role.name, type=role.type)) displayed_name = private_role_emails.get(role.id, role.name) return_roles.append(BasicRoleModel(id=role.id, name=displayed_name, type=role.type)) return LibraryAvailablePermissions(roles=return_roles, page=page, page_limit=page_limit, total=total_roles) else: raise RequestParameterInvalidException( Loading Loading
lib/galaxy/managers/folders.py +16 −10 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ from dataclasses import dataclass from typing import ( List, Optional, Set, Tuple, Union, ) Loading Loading @@ -49,6 +50,7 @@ from galaxy.model import ( LibraryFolderPermissions, ) from galaxy.model.base import transaction from galaxy.model.db.role import get_private_role_user_emails_dict from galaxy.model.scoped_session import galaxy_scoped_session from galaxy.schema.schema import LibraryFolderContentsIndexQueryPayload from galaxy.security import RBACAgent Loading Loading @@ -295,6 +297,8 @@ class FolderManager: :returns: dict of current roles for all available permission types :rtype: dictionary """ private_role_emails = get_private_role_user_emails_dict(trans.sa_session) # Omit duplicated roles by converting to set modify_roles = set( trans.app.security_agent.get_roles_for_action( Loading @@ -312,17 +316,19 @@ class FolderManager: ) ) modify_folder_role_list = [ (modify_role.name, trans.security.encode_id(modify_role.id)) for modify_role in modify_roles ] manage_folder_role_list = [ (manage_role.name, trans.security.encode_id(manage_role.id)) for manage_role in manage_roles ] add_library_item_role_list = [(add_role.name, trans.security.encode_id(add_role.id)) for add_role in add_roles] def make_tuples(roles: Set): tuples = [] for role in roles: # use role name for non-private roles, and user.email from private rules displayed_name = private_role_emails.get(role.id, role.name) role_tuple = (displayed_name, trans.security.encode_id(role.id)) tuples.append(role_tuple) return tuples return dict( modify_folder_role_list=modify_folder_role_list, manage_folder_role_list=manage_folder_role_list, add_library_item_role_list=add_library_item_role_list, modify_folder_role_list=make_tuples(modify_roles), manage_folder_role_list=make_tuples(manage_roles), add_library_item_role_list=make_tuples(add_roles), ) def can_add_item(self, trans, folder): Loading
lib/galaxy/webapps/galaxy/services/library_folders.py +5 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ from galaxy.exceptions import ( ) from galaxy.managers.folders import FolderManager from galaxy.managers.roles import RoleManager from galaxy.model.db.role import get_private_role_user_emails_dict from galaxy.schema.fields import LibraryFolderDatabaseIdField from galaxy.schema.schema import ( BasicRoleModel, Loading Loading @@ -114,9 +115,12 @@ class LibraryFoldersService(ServiceBase): # Return roles that are available to select. elif scope == LibraryPermissionScope.available: roles, total_roles = trans.app.security_agent.get_valid_roles(trans, folder, query, page, page_limit) private_role_emails = get_private_role_user_emails_dict(trans.sa_session) return_roles = [] for role in roles: return_roles.append(BasicRoleModel(id=role.id, name=role.name, type=role.type)) displayed_name = private_role_emails.get(role.id, role.name) return_roles.append(BasicRoleModel(id=role.id, name=displayed_name, type=role.type)) return LibraryAvailablePermissions(roles=return_roles, page=page, page_limit=page_limit, total=total_roles) else: raise RequestParameterInvalidException( Loading