Commit 3c2244bd authored by John Davis's avatar John Davis
Browse files

Fix library_folders::get_permissions()

parent 3b35f1f5
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ from dataclasses import dataclass
from typing import (
    List,
    Optional,
    Set,
    Tuple,
    Union,
)
@@ -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
@@ -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(
@@ -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):
+5 −1
Original line number Diff line number Diff line
@@ -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,
@@ -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(