diff --git a/src/backoffice/tests/assemblies.py b/src/backoffice/tests/assemblies.py
index 78f644e461584a049c3ef6dcead6ad91a6cb56df..5e636efc71dbba0ce0db55c3fe7d0d8c40fa7566 100644
--- a/src/backoffice/tests/assemblies.py
+++ b/src/backoffice/tests/assemblies.py
@@ -1,6 +1,8 @@
 from django.urls import reverse
 
-from core.models import Assembly, AssemblyLink
+from core.models import Assembly, AssemblyLink, AssemblyMember
+from core.models.conference import ConferenceMember
+from core.models.users import PlatformUser
 
 from backoffice.tests import BackOfficeTestCase
 
@@ -22,3 +24,25 @@ class AssemblyListViewTest(BackOfficeTestCase):
         resp = self.client.get(reverse('backoffice:assemblieslist', kwargs={'variant': 'slugname'}))
         self.assertEqual(resp.context['data'][0][3], 'a2, a3')
         self.assertIn(b'a2, a3', resp.content)
+
+
+class AssemblyMembersViewTest(BackOfficeTestCase):
+    def setUp(self):
+        super().setUp()
+        self.assembly = Assembly.objects.create(slug='a1', name='a1', is_physical=True, conference_id=self.conf.id, state_assembly=Assembly.State.ACCEPTED)
+        self.users: list[PlatformUser] = [
+            PlatformUser.objects.create(
+                username=a,
+            )
+            for a in ('a1', 'a2', 'a3')
+        ]
+        members: list[ConferenceMember] = []
+        for user in self.users:
+            members.append(ConferenceMember.objects.create(user=user, conference=self.conf))
+            user.associated_assemblies.add(AssemblyMember.objects.create(member=user, assembly=self.assembly))
+
+    def test_member_list(self):
+        self.client.force_login(self.staff)
+        resp = self.client.get(reverse('backoffice:assembly-members', kwargs={'pk': self.assembly.id}))
+        self.assertEqual(resp.status_code, 200)
+        self.assertEqual(resp.context['object_list'].count(), 3)
diff --git a/src/backoffice/views/mixins.py b/src/backoffice/views/mixins.py
index b47660a1d6a07c65f62a5f21ad5e198d2d696abc..fe34962ff8f11a8c3c4b7cb0d1c9f8cc5850c29b 100644
--- a/src/backoffice/views/mixins.py
+++ b/src/backoffice/views/mixins.py
@@ -181,13 +181,13 @@ class AssemblyMixin(ConferenceLoginRequiredMixin):
         assembly = Assembly.objects.get(conference=self.conference, pk=self.request.resolver_match.kwargs.get(self.assembly_url_param))
 
         # check if it's the assembly team
-        if self.conferencemember.has_perms('assembly_team', require_staff=True):
+        if self.conferencemember.has_perms('core.assembly_team', require_staff=True):
             self._assembly_staff_access = True
             self._staff_access = self._staff_access or assembly.state_assembly != Assembly.State.NONE
             self._staff_mode = True
 
         # check if it's the channel team
-        if self.conferencemember.has_perms('channel_team', require_staff=True):
+        if self.conferencemember.has_perms('core.channel_team', require_staff=True):
             self._channels_staff_access = True
             self._staff_access = self._staff_access or assembly.state_channel != Assembly.State.NONE
             self._staff_mode = True
diff --git a/src/core/models/assemblies.py b/src/core/models/assemblies.py
index 0b41c019b0eb2800ac6f6aff8677aa169d774f7e..5acc01978b75af7ddb30e0f9e21273af787f352e 100644
--- a/src/core/models/assemblies.py
+++ b/src/core/models/assemblies.py
@@ -402,7 +402,7 @@ class Assembly(TaggedItemMixin, models.Model):
         if not user.is_authenticated:
             return False
 
-        if staff_can_manage and user.has_conference_staff_permission(self.conference, 'assembly_team', 'channel_team'):
+        if staff_can_manage and user.has_conference_staff_permission(self.conference, 'core.assembly_team', 'core.channel_team'):
             return True
 
         return self.members.filter(member=user, can_manage_assembly=True).exists()
@@ -555,6 +555,9 @@ class AssemblyMemberManager(ConferenceManagerMixin['AssemblyMember']):
     def apply_public_filter(self, queryset: 'QuerySet[AssemblyMember]', member: ConferenceMember | None = None) -> 'QuerySet[AssemblyMember]':
         return queryset.filter(show_public=True)
 
+    def manageable_by_user_for_assembly(self, *, user: PlatformUser, assembly: 'Assembly') -> 'QuerySet[AssemblyMember]':
+        return self.manageable_by_user(conference=assembly.conference, user=user).filter(assembly=assembly)
+
 
 class AssemblyMember(models.Model):
     objects = AssemblyMemberManager()