public async Task <bool> Authorize(int userId, int teamId, TeamAction action) { List <string> userRoles = await _rolesDao.GetRoles(userId, teamId); List <string> acceptedRoles; switch (action) { case TeamAction.RemoveTeam: case TeamAction.GenerateJoinCode: case TeamAction.ChangeRole: case TeamAction.RenameTeam: case TeamAction.RemoveJoinCode: case TeamAction.RemoveMember: return(userRoles.Contains(_adminRole)); case TeamAction.AddMember: case TeamAction.CreateMeeting: acceptedRoles = new List <string> { _adminRole, _moderatorRole }; return(userRoles.Intersect(acceptedRoles).Any()); case TeamAction.MemberAccess: acceptedRoles = new List <string> { _adminRole, _moderatorRole, _memberRole, }; return(userRoles.Intersect(acceptedRoles).Any()); } return(false); }