diff --git a/changes/issue-1644-refetch-host-in-team b/changes/issue-1644-refetch-host-in-team new file mode 100644 index 0000000000..c436150c44 --- /dev/null +++ b/changes/issue-1644-refetch-host-in-team @@ -0,0 +1 @@ +* Allow observers and maintainers to refetch a host in a team they belong to. diff --git a/server/service/service_hosts.go b/server/service/service_hosts.go index db03762174..e931a420d2 100644 --- a/server/service/service_hosts.go +++ b/server/service/service_hosts.go @@ -183,10 +183,6 @@ func (svc Service) AddHostsToTeamByFilter(ctx context.Context, teamID *uint, opt } func (svc *Service) RefetchHost(ctx context.Context, id uint) error { - if err := svc.authz.Authorize(ctx, &fleet.Host{}, fleet.ActionRead); err != nil { - return err - } - host, err := svc.ds.Host(id) if err != nil { return errors.Wrap(err, "find host for refetch") diff --git a/server/service/service_hosts_test.go b/server/service/service_hosts_test.go index f45eb96d53..70e75543f3 100644 --- a/server/service/service_hosts_test.go +++ b/server/service/service_hosts_test.go @@ -110,6 +110,41 @@ func TestRefetchHost(t *testing.T) { } require.NoError(t, svc.RefetchHost(test.UserContext(test.UserAdmin), host.ID)) + require.NoError(t, svc.RefetchHost(test.UserContext(test.UserObserver), host.ID)) + require.NoError(t, svc.RefetchHost(test.UserContext(test.UserMaintainer), host.ID)) +} + +func TestRefetchHostUserInTeams(t *testing.T) { + ds := new(mock.Store) + svc := newTestService(ds, nil, nil) + + host := &fleet.Host{ID: 3, TeamID: ptr.Uint(4)} + + ds.HostFunc = func(hid uint) (*fleet.Host, error) { + return host, nil + } + ds.SaveHostFunc = func(host *fleet.Host) error { + assert.True(t, host.RefetchRequested) + return nil + } + + maintainer := &fleet.User{ + Teams: []fleet.UserTeam{ + { + Team: fleet.Team{ID: 4}, + Role: fleet.RoleMaintainer, + }, + }} + require.NoError(t, svc.RefetchHost(test.UserContext(maintainer), host.ID)) + + observer := &fleet.User{ + Teams: []fleet.UserTeam{ + { + Team: fleet.Team{ID: 4}, + Role: fleet.RoleObserver, + }, + }} + require.NoError(t, svc.RefetchHost(test.UserContext(observer), host.ID)) } func TestAddHostsToTeamByFilter(t *testing.T) {