Skip to content

Commit 1043149

Browse files
direct message and team user add fix
1 parent 7090353 commit 1043149

File tree

9 files changed

+50
-50
lines changed

9 files changed

+50
-50
lines changed

app/eventyay/api/views/event.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,10 @@
6262
# from pretix.presale.views.organizer import filter_qs_by_attr # commented out
6363
from eventyay.api.task import configure_video_settings_for_talks
6464
from eventyay.api.utils import get_protocol
65+
from eventyay.eventyay_common.video.permissions import VIDEO_TRAIT_ROLE_MAP
6566

6667
logger = logging.getLogger(__name__)
6768

68-
VIDEO_TRAIT_ROLE_MAP = {
69-
'video_stage_manager': 'video_stage_manager',
70-
'video_channel_manager': 'video_channel_manager',
71-
'video_direct_messaging': 'video_direct_messaging',
72-
'video_announcement_manager': 'video_announcement_manager',
73-
'video_user_viewer': 'video_user_viewer',
74-
'video_user_moderator': 'video_user_moderator',
75-
'video_room_manager': 'video_room_manager',
76-
'video_kiosk_manager': 'video_kiosk_manager',
77-
'video_config_manager': 'video_config_manager',
78-
}
79-
8069
with scopes_disabled():
8170

8271
class EventFilter(FilterSet):

app/eventyay/base/models/event.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
has_any_permission,
6666
is_event_visible,
6767
)
68+
from eventyay.eventyay_common.video.permissions import VIDEO_PERMISSION_BY_FIELD, VIDEO_TRAIT_ROLE_MAP
6869
from .auth import User
6970
from ..settings import settings_hierarkey
7071
from .mixins import OrderedModel, PretalxModel
@@ -158,19 +159,6 @@ def default_grants():
158159
}
159160

160161

161-
VIDEO_TRAIT_ROLE_MAP = {
162-
"video_stage_manager": "video_stage_manager",
163-
"video_channel_manager": "video_channel_manager",
164-
"video_direct_messaging": "video_direct_messaging",
165-
"video_announcement_manager": "video_announcement_manager",
166-
"video_user_viewer": "video_user_viewer",
167-
"video_user_moderator": "video_user_moderator",
168-
"video_room_manager": "video_room_manager",
169-
"video_kiosk_manager": "video_kiosk_manager",
170-
"video_config_manager": "video_config_manager",
171-
}
172-
173-
174162
FEATURE_FLAGS = [
175163
"schedule-control",
176164
"iframe-player",
@@ -1547,9 +1535,18 @@ def get_all_permissions(self, user):
15471535
)
15481536
and (required_traits or allow_empty_traits)
15491537
):
1550-
result[self].update(event_roles.get(role, SYSTEM_ROLES.get(role, [])))
1551-
1552-
# Removed user.world_grants loop (attribute not present on unified User model)
1538+
role_perms = event_roles.get(role, SYSTEM_ROLES.get(role, []))
1539+
1540+
direct_messaging_def = VIDEO_PERMISSION_BY_FIELD.get('can_video_direct_message')
1541+
if direct_messaging_def and role != 'video_direct_messaging':
1542+
direct_messaging_trait = direct_messaging_def.trait_value(self.slug)
1543+
has_direct_messaging_trait = direct_messaging_trait in user.traits
1544+
1545+
if not has_direct_messaging_trait:
1546+
direct_message_value = Permission.EVENT_CHAT_DIRECT.value
1547+
role_perms = [p for p in role_perms if (p if isinstance(p, str) else p.value) != direct_message_value]
1548+
1549+
result[self].update(role_perms)
15531550

15541551
for room in self.rooms.all():
15551552
room_trait_grants = room.trait_grants if room.trait_grants is not None else {}

app/eventyay/base/models/world.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131

3232
def default_roles():
3333
attendee = [
34-
Permission.WORLD_VIEW,
35-
Permission.WORLD_EXHIBITION_CONTACT,
34+
Permission.EVENT_VIEW,
35+
Permission.EVENT_EXHIBITION_CONTACT,
3636
]
3737
viewer = attendee + [Permission.ROOM_VIEW, Permission.ROOM_CHAT_READ]
3838
participant = viewer + [
@@ -48,7 +48,7 @@ def default_roles():
4848
Permission.ROOM_JANUSCALL_JOIN,
4949
Permission.ROOM_ZOOM_JOIN,
5050
]
51-
room_creator = [Permission.WORLD_ROOMS_CREATE_CHAT]
51+
room_creator = [Permission.EVENT_ROOMS_CREATE_CHAT]
5252
room_owner = participant + [
5353
Permission.ROOM_INVITE,
5454
Permission.ROOM_DELETE,
@@ -66,27 +66,27 @@ def default_roles():
6666
Permission.ROOM_QUESTION_MODERATE,
6767
Permission.ROOM_POLL_EARLY_RESULTS,
6868
Permission.ROOM_POLL_MANAGE,
69-
Permission.WORLD_ANNOUNCE,
69+
Permission.EVENT_ANNOUNCE,
7070
]
7171
admin = (
7272
moderator
7373
+ room_creator
7474
+ [
75-
Permission.WORLD_UPDATE,
75+
Permission.EVENT_UPDATE,
7676
Permission.ROOM_DELETE,
7777
Permission.ROOM_UPDATE,
78-
Permission.WORLD_ROOMS_CREATE_BBB,
79-
Permission.WORLD_ROOMS_CREATE_STAGE,
80-
Permission.WORLD_ROOMS_CREATE_EXHIBITION,
81-
Permission.WORLD_ROOMS_CREATE_POSTER,
82-
Permission.WORLD_USERS_LIST,
83-
Permission.WORLD_USERS_MANAGE,
84-
Permission.WORLD_GRAPHS,
85-
Permission.WORLD_CONNECTIONS_UNLIMITED,
78+
Permission.EVENT_ROOMS_CREATE_BBB,
79+
Permission.EVENT_ROOMS_CREATE_STAGE,
80+
Permission.EVENT_ROOMS_CREATE_EXHIBITION,
81+
Permission.EVENT_ROOMS_CREATE_POSTER,
82+
Permission.EVENT_USERS_LIST,
83+
Permission.EVENT_USERS_MANAGE,
84+
Permission.EVENT_GRAPHS,
85+
Permission.EVENT_CONNECTIONS_UNLIMITED,
8686
]
8787
)
88-
apiuser = admin + [Permission.WORLD_API, Permission.WORLD_SECRETS]
89-
scheduleuser = [Permission.WORLD_API]
88+
apiuser = admin + [Permission.EVENT_API, Permission.EVENT_SECRETS]
89+
scheduleuser = [Permission.EVENT_API]
9090
video_stage_manager = [Permission.EVENT_ROOMS_CREATE_STAGE]
9191
video_channel_manager = [Permission.EVENT_ROOMS_CREATE_CHAT, Permission.EVENT_ROOMS_CREATE_BBB]
9292
video_direct_messaging = [Permission.EVENT_CHAT_DIRECT]

app/eventyay/eventyay_common/video/permissions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ def trait_value(self, event_slug: str) -> str:
3636
definition.trait_name for definition in VIDEO_PERMISSION_DEFINITIONS
3737
]
3838

39+
VIDEO_TRAIT_ROLE_MAP: Dict[str, str] = {
40+
definition.trait_name: definition.trait_name
41+
for definition in VIDEO_PERMISSION_DEFINITIONS
42+
}
43+
3944

4045
def iter_video_permission_definitions() -> Iterable[VideoPermissionDefinition]:
4146
return VIDEO_PERMISSION_DEFINITIONS

app/eventyay/eventyay_common/views/organizer.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,9 +375,11 @@ def _handle_team_update(self):
375375
def _handle_team_members(self):
376376
team = self._get_team_from_post()
377377
self._forced_section = 'permissions'
378+
invite_form_prefix = self._invite_form_prefix(team)
379+
prefixed_user_field = f'{invite_form_prefix}-user'
378380
invite_form = InviteForm(
379-
data=(self.request.POST if 'user' in self.request.POST else None),
380-
prefix=self._invite_form_prefix(team),
381+
data=(self.request.POST if prefixed_user_field in self.request.POST else None),
382+
prefix=invite_form_prefix,
381383
)
382384

383385
request = self.request
@@ -448,7 +450,7 @@ def _handle_team_members(self):
448450
messages.success(request, _('The invite has been resent.'))
449451
return redirect(self._teams_tab_url(team.pk, section='permissions'))
450452

451-
elif 'user' in post and invite_form.is_valid() and invite_form.has_changed():
453+
elif f'{invite_form_prefix}-user' in post and invite_form.is_valid() and invite_form.has_changed():
452454
try:
453455
user = User.objects.get(email__iexact=invite_form.cleaned_data['user'])
454456
except User.DoesNotExist:

app/eventyay/webapp/src/components/CreateDmPrompt.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ export default {
2424
},
2525
methods: {
2626
async create(users) {
27+
// Check permission before creating direct message
28+
if (!this.hasPermission('world:chat.direct')) {
29+
this.$emit('close')
30+
return
31+
}
2732
// TODO error handling, progress
2833
await this.$store.dispatch('chat/openDirectMessage', {users: users})
2934
this.$emit('close')

app/eventyay/webapp/src/components/CreateStagePrompt.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ export default {
7878
this.$router.push({name: 'room', params: {roomId: room}})
7979
this.$emit('close')
8080
} catch (error) {
81-
console.log(error)
8281
this.loading = false
8382
this.error = error.message || error
8483
}

app/eventyay/webapp/src/components/RoomsSidebar.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ transition(name="sidebar")
5050
bunt-button#btn-browse-channels-trailing(v-if="worldHasTextChannels", @click="showChannelBrowser = true") {{ $t('RoomsSidebar:browse-channels-button:label') }}
5151
.group-title#dm-title(v-if="hasPermission('world:chat.direct')")
5252
span {{ $t('RoomsSidebar:direct-messages-headline:text') }}
53-
bunt-icon-button(tooltip="open a direct message", :tooltip-fixed="true", @click="showDMCreationPrompt = true") plus
53+
bunt-icon-button(v-if="hasPermission('world:chat.direct')", tooltip="open a direct message", :tooltip-fixed="true", @click="showDMCreationPrompt = true") plus
5454
.direct-messages(v-if="hasPermission('world:chat.direct') && directMessageChannels.length", role="group", aria-describedby="dm-title")
5555
router-link.direct-message(v-for="channel of directMessageChannels", :to="{name: 'channel', params: {channelId: channel.id}}", :class="{unread: hasUnreadMessages(channel.id)}")
5656
i.bunt-icon.mdi(v-if="call && call.channel === channel.id", aria-hidden="true").mdi-phone
@@ -79,7 +79,7 @@ transition(name="sidebar")
7979
channel-browser(v-if="showChannelBrowser", @close="showChannelBrowser = false", @createChannel="showChannelBrowser = false, showChatCreationPrompt = true")
8080
create-stage-prompt(v-else-if="showStageCreationPrompt", @close="showStageCreationPrompt = false")
8181
create-chat-prompt(v-else-if="showChatCreationPrompt", @close="showChatCreationPrompt = false")
82-
create-dm-prompt(v-else-if="showDMCreationPrompt", @close="showDMCreationPrompt = false")
82+
create-dm-prompt(v-else-if="showDMCreationPrompt && hasPermission('world:chat.direct')", @close="showDMCreationPrompt = false")
8383
</template>
8484
<script>
8585
import { mapState, mapGetters } from 'vuex'
@@ -165,6 +165,10 @@ export default {
165165
return rooms
166166
},
167167
directMessageChannels() {
168+
// Only show direct message channels if user has explicit permission
169+
if (!this.hasPermission('world:chat.direct')) {
170+
return []
171+
}
168172
return this.joinedChannels
169173
?.filter(channel => channel.members)
170174
.map(channel => {

app/eventyay/webapp/src/views/admin/config/CreateRoomPrompt.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ export default {
4747
this.$router.push({name: 'admin:rooms:item', params: {roomId: room}})
4848
this.$emit('close')
4949
} catch (error) {
50-
console.log(error)
5150
this.loading = false
5251
this.error = error.message || error
5352
}

0 commit comments

Comments
 (0)