Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow collaborators to add / remove members to / from team if they are are conversation admins.
23 changes: 18 additions & 5 deletions libs/wire-api/src/Wire/API/Team/Collaborator.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

module Wire.API.Team.Collaborator where

import Control.Lens qualified as L
import Data.Aeson qualified as A
import Data.Id
import Data.OpenApi qualified as S
Expand All @@ -33,11 +34,23 @@ data CollaboratorPermission = CreateTeamConversation | ImplicitConnection

instance ToSchema CollaboratorPermission where
schema =
enum @Text $
mconcat
[ element "create_team_conversation" CreateTeamConversation,
element "implicit_connection" ImplicitConnection
]
(doc . description L.?~ descr) $
enum @Text $
mconcat
[ element "create_team_conversation" CreateTeamConversation,
element "implicit_connection" ImplicitConnection
]
where
descr =
"<p>Permission granted to a team collaborator.</p>\
\<ul><li>`create_team_conversation`: equivalent to the `CreateConversation` and \
\`AddRemoveConvMember` permissions for team members (both implied in the `member` \
\role); allows creating team group conversations and adding members to them.</li>\n\
\<li>`implicit_connection`: team members are implicitly connected to each \
\other, allowing conversations (1:1 or group) without an explicit connection \
\request. This permission grants the same to a collaborator.</li></ul>\n\
\<p>NB: a member of team A can always open conversations with a collaborator of \
\team A; the permission only controls the collaborator's abilities.</p>"

data TeamCollaboratorsError
= InsufficientRights
Expand Down
2 changes: 2 additions & 0 deletions libs/wire-api/src/Wire/API/Team/Member.hs
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@ data HiddenPerm
| ChangeTeamMemberProfiles
| SearchContacts
| NewTeamCollaborator
| GetTeamCollaborators
| JoinRegularConversations
| CreateApp
| ManageApps
Expand Down Expand Up @@ -597,6 +598,7 @@ roleHiddenPermissions role = HiddenPermissions p p
(roleHiddenPerms RoleExternalPartner <>) $
Set.fromList
[ ViewSameTeamEmails,
GetTeamCollaborators,
SearchContacts
]
roleHiddenPerms RoleExternalPartner =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ createTeamCollaboratorImpl ::
Set CollaboratorPermission ->
Sem r ()
createTeamCollaboratorImpl zUser user team perms = do
guardPermission (tUnqualified zUser) team TeamMember.NewTeamCollaborator InsufficientRights
guardPermission (tUnqualified zUser) team TeamMember.GetTeamCollaborators InsufficientRights
Store.createTeamCollaborator user team perms

-- TODO: Review the event's values
Expand All @@ -97,7 +97,7 @@ getAllTeamCollaboratorsImpl ::
TeamId ->
Sem r [TeamCollaborator]
getAllTeamCollaboratorsImpl zUser team = do
guardPermission (tUnqualified zUser) team TeamMember.NewTeamCollaborator InsufficientRights
guardPermission (tUnqualified zUser) team TeamMember.GetTeamCollaborators InsufficientRights
Store.getAllTeamCollaborators team

internalGetTeamCollaboratorsWithIdsImpl ::
Expand Down
Loading