Commit e878d570 authored by John Davis's avatar John Davis
Browse files

Fix manage library permissions

Display associated user email as role name for private roles, and role
name for non-private roles.
parent e050229f
Loading
Loading
Loading
Loading
+20 −19
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ from galaxy.model.db.library import (
    get_library_ids,
    get_library_permissions_by_role,
)
from galaxy.model.db.role import get_private_role_user_emails_dict
from galaxy.util import (
    pretty_print_time_interval,
    unicodify,
@@ -277,26 +278,26 @@ class LibraryManager:
        :rtype:     dictionary
        :returns:   dict of current roles for all available permission types
        """
        access_library_role_list = [
            (access_role.name, trans.security.encode_id(access_role.id))
            for access_role in self.get_access_roles(trans, library)
        ]
        modify_library_role_list = [
            (modify_role.name, trans.security.encode_id(modify_role.id))
            for modify_role in self.get_modify_roles(trans, library)
        ]
        manage_library_role_list = [
            (manage_role.name, trans.security.encode_id(manage_role.id))
            for manage_role in self.get_manage_roles(trans, library)
        ]
        add_library_item_role_list = [
            (add_role.name, trans.security.encode_id(add_role.id)) for add_role in self.get_add_roles(trans, library)
        ]
        private_role_emails = get_private_role_user_emails_dict(trans.sa_session)
        access_roles = self.get_access_roles(trans, library)
        modify_roles = self.get_modify_roles(trans, library)
        manage_roles = self.get_manage_roles(trans, library)
        add_roles = self.get_add_roles(trans, library)

        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(
            access_library_role_list=access_library_role_list,
            modify_library_role_list=modify_library_role_list,
            manage_library_role_list=manage_library_role_list,
            add_library_item_role_list=add_library_item_role_list,
            access_library_role_list=make_tuples(access_roles),
            modify_library_role_list=make_tuples(modify_roles),
            manage_library_role_list=make_tuples(manage_roles),
            add_library_item_role_list=make_tuples(add_roles),
        )

    def get_access_roles(self, trans, library: Library) -> Set[Role]:
+4 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ from galaxy.managers.folders import FolderManager
from galaxy.managers.libraries import LibraryManager
from galaxy.managers.roles import RoleManager
from galaxy.model import Role
from galaxy.model.db.role import get_private_role_user_emails_dict
from galaxy.schema.fields import DecodedDatabaseIdField
from galaxy.schema.schema import (
    BasicRoleModel,
@@ -170,9 +171,11 @@ class LibrariesService(ServiceBase, ConsumesModelStores):
                trans, library, query, page, page_limit, is_library_access
            )

            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.model_construct(
                roles=return_roles, page=page, page_limit=page_limit, total=total_roles
            )