github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/lifeflag/facade.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lifeflag
     5  
     6  import (
     7  	"github.com/juju/names/v5"
     8  
     9  	"github.com/juju/juju/apiserver/common"
    10  	apiservererrors "github.com/juju/juju/apiserver/errors"
    11  	"github.com/juju/juju/apiserver/facade"
    12  	"github.com/juju/juju/state"
    13  )
    14  
    15  type Backend interface {
    16  	ModelUUID() string
    17  	state.EntityFinder
    18  }
    19  
    20  func NewFacade(backend Backend, resources facade.Resources, authorizer facade.Authorizer) (*Facade, error) {
    21  	if !authorizer.AuthController() {
    22  		return nil, apiservererrors.ErrPerm
    23  	}
    24  	expect := names.NewModelTag(backend.ModelUUID())
    25  	getCanAccess := func() (common.AuthFunc, error) {
    26  		return func(tag names.Tag) bool {
    27  			return tag == expect
    28  		}, nil
    29  	}
    30  	life := common.NewLifeGetter(backend, getCanAccess)
    31  	watch := common.NewAgentEntityWatcher(backend, resources, getCanAccess)
    32  	return &Facade{
    33  		LifeGetter:         life,
    34  		AgentEntityWatcher: watch,
    35  	}, nil
    36  }
    37  
    38  type Facade struct {
    39  	*common.LifeGetter
    40  	*common.AgentEntityWatcher
    41  }