github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/core/secrets/rbac.go (about)

     1  // Copyright 2021 Canonical Ltd.
     2  // Licensed under the LGPLv3, see LICENCE file for details.
     3  
     4  package secrets
     5  
     6  // SecretRole is an access role on a secret.
     7  type SecretRole string
     8  
     9  const (
    10  	RoleNone   = SecretRole("")
    11  	RoleView   = SecretRole("view")
    12  	RoleRotate = SecretRole("rotate")
    13  	RoleManage = SecretRole("manage")
    14  )
    15  
    16  // IsValid returns true if r is a valid secret role.
    17  func (r SecretRole) IsValid() bool {
    18  	switch r {
    19  	case RoleNone, RoleView, RoleRotate, RoleManage:
    20  		return true
    21  	}
    22  	return false
    23  }
    24  
    25  func (r SecretRole) value() int {
    26  	switch r {
    27  	case RoleView:
    28  		return 1
    29  	case RoleRotate:
    30  		return 2
    31  	case RoleManage:
    32  		return 3
    33  	default:
    34  		return -1
    35  	}
    36  }
    37  
    38  func (r SecretRole) Allowed(wanted SecretRole) bool {
    39  	v1, v2 := r.value(), wanted.value()
    40  	if v1 < 0 || v2 < 0 {
    41  		return false
    42  	}
    43  	return v1 >= v2
    44  }