diff --git a/cache/cache.go b/cache/cache.go index 2fddd09..67b3538 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -7,6 +7,13 @@ import ( "github.com/aserto-dev/azm/model/diff" stts "github.com/aserto-dev/azm/stats" dsc "github.com/aserto-dev/go-directory/aserto/directory/common/v3" + "github.com/aserto-dev/go-directory/pkg/derr" + "github.com/samber/lo" +) + +type ( + ObjectName = model.ObjectName + RelationName = model.RelationName ) type Cache struct { @@ -37,7 +44,7 @@ func (c *Cache) CanUpdate(other *model.Model, stats *stts.Stats) error { } // ObjectExists, checks if given object type name exists in the model cache. -func (c *Cache) ObjectExists(on model.ObjectName) bool { +func (c *Cache) ObjectExists(on ObjectName) bool { c.mtx.RLock() defer c.mtx.RUnlock() @@ -46,7 +53,7 @@ func (c *Cache) ObjectExists(on model.ObjectName) bool { } // RelationExists, checks if given relation type, for the given object type, exists in the model cache. -func (c *Cache) RelationExists(on model.ObjectName, rn model.RelationName) bool { +func (c *Cache) RelationExists(on ObjectName, rn RelationName) bool { c.mtx.RLock() defer c.mtx.RUnlock() @@ -58,7 +65,7 @@ func (c *Cache) RelationExists(on model.ObjectName, rn model.RelationName) bool } // PermissionExists, checks if given permission, for the given object type, exists in the model cache. -func (c *Cache) PermissionExists(on model.ObjectName, pn model.RelationName) bool { +func (c *Cache) PermissionExists(on ObjectName, pn RelationName) bool { c.mtx.RLock() defer c.mtx.RUnlock() @@ -80,11 +87,46 @@ func (c *Cache) ValidateRelation(relation *dsc.Relation) error { defer c.mtx.RUnlock() return c.model.ValidateRelation( - model.ObjectName(relation.ObjectType), + ObjectName(relation.ObjectType), model.ObjectID(relation.ObjectId), - model.RelationName(relation.Relation), - model.ObjectName(relation.SubjectType), + RelationName(relation.Relation), + ObjectName(relation.SubjectType), model.ObjectID(relation.SubjectId), - model.RelationName(relation.SubjectRelation), + RelationName(relation.SubjectRelation), ) } + +func (c *Cache) AssignableRelations(on, sn ObjectName, sr ...RelationName) ([]RelationName, error) { + if !c.ObjectExists(on) { + return nil, derr.ErrObjectNotFound.Msg(on.String()) + } + if !c.ObjectExists(sn) { + return nil, derr.ErrObjectNotFound.Msg(sn.String()) + } + for _, srel := range sr { + if !c.RelationExists(sn, srel) { + return nil, derr.ErrRelationNotFound.Msgf("%s#%s", sn, sr) + } + } + + matches := lo.PickBy(c.model.Objects[on].Relations, func(rn RelationName, r *model.Relation) bool { + for _, ref := range r.Union { + if ref.Object != sn { + // type mismatch + continue + } + + switch { + case ref.IsDirect(), ref.IsWildcard(): + if len(sr) == 0 { + return true + } + case ref.IsSubject() && lo.Contains(sr, ref.Relation): + return true + } + } + return false + }) + + return lo.Keys(matches), nil +} diff --git a/cache/cache_test.go b/cache/cache_test.go new file mode 100644 index 0000000..d5bf1d1 --- /dev/null +++ b/cache/cache_test.go @@ -0,0 +1,66 @@ +package cache_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/aserto-dev/azm/cache" + v3 "github.com/aserto-dev/azm/v3" + "github.com/samber/lo" + "github.com/stretchr/testify/require" +) + +type ( + ON = cache.ObjectName + RN = cache.RelationName +) + +type testCase struct { + on ON + sn ON + sr []RN + expected []RN +} + +func (t *testCase) name() string { + name := fmt.Sprintf("%s#?@%s", t.on, t.sn) + switch len(t.sr) { + case 0: + return name + case 1: + return fmt.Sprintf("%s#%s", name, t.sr[0]) + default: + srs := strings.Join(lo.Map(t.sr, func(sr RN, _ int) string { return sr.String() }), "|") + return fmt.Sprintf("%s#[%s]", name, srs) + } +} + +func TestAssignableRelations(t *testing.T) { + m, err := v3.LoadFile("./cache_test.yaml") + require.NoError(t, err) + require.NotNil(t, m) + + c := cache.New(m) + + tests := []*testCase{ + {"machine", "user", nil, []RN{"owner"}}, + {"machine", "tenant", nil, nil}, + {"group", "group", []RN{"member"}, []RN{"member", "guest"}}, + {"group", "user", nil, []RN{"member", "guest"}}, + {"tenant", "user", nil, []RN{"owner", "admin", "viewer"}}, + {"tenant", "group", nil, nil}, + {"tenant", "machine", nil, nil}, + {"tenant", "machine", []RN{"owner"}, []RN{"log_writer", "data_reader"}}, + } + + for _, test := range tests { + t.Run(test.name(), func(tt *testing.T) { + assert := require.New(tt) + actual, err := c.AssignableRelations(test.on, test.sn, test.sr...) + assert.NoError(err) + assert.Equal(len(test.expected), len(actual)) + assert.Subset(test.expected, actual) + }) + } +} diff --git a/cache/cache_test.yaml b/cache/cache_test.yaml new file mode 100644 index 0000000..1d7a08a --- /dev/null +++ b/cache/cache_test.yaml @@ -0,0 +1,27 @@ +# yaml-language-server: $schema=manifest.json +--- + +# model +model: + version: 3 + +types: + user: {} + + machine: + relations: + owner: user + + group: + relations: + member: user | group#member + guest: user | group#member + + tenant: + relations: + owner: user + admin: user | group#member + viewer: user | group#member | group#guest + + log_writer: machine#owner + data_reader: machine#owner diff --git a/cache/metadata.go b/cache/metadata.go deleted file mode 100644 index ef2e860..0000000 --- a/cache/metadata.go +++ /dev/null @@ -1,230 +0,0 @@ -// nolint: staticcheck -package cache - -import ( - "sort" - - "github.com/aserto-dev/azm/model" - dsc2 "github.com/aserto-dev/go-directory/aserto/directory/common/v2" - "github.com/aserto-dev/go-directory/pkg/derr" - "github.com/samber/lo" - "golang.org/x/text/cases" - "golang.org/x/text/language" - "google.golang.org/protobuf/types/known/structpb" - "google.golang.org/protobuf/types/known/timestamppb" -) - -// GetObjectType, v2 backwards-compatibility accessor function, returns v2 ObjectType by name. -func (c *Cache) GetObjectType(objectType string) (*dsc2.ObjectType, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - if _, ok := c.model.Objects[model.ObjectName(objectType)]; ok { - return &dsc2.ObjectType{ - Name: objectType, - DisplayName: title(objectType), - IsSubject: false, - Ordinal: 0, - Status: 0, - Schema: &structpb.Struct{}, - CreatedAt: timestamppb.Now(), - UpdatedAt: timestamppb.Now(), - Hash: "", - }, nil - } - - return &dsc2.ObjectType{}, derr.ErrObjectTypeNotFound.Msg(objectType) -} - -// GetObjectTypes, v2 backwards-compatibility accessor function, returns list of v2.ObjectType instances. -func (c *Cache) GetObjectTypes() (ObjectTypeSlice, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - results := []*dsc2.ObjectType{} - - for objectType := range c.model.Objects { - results = append(results, &dsc2.ObjectType{ - Name: string(objectType), - DisplayName: title(string(objectType)), - IsSubject: false, - Ordinal: 0, - Status: 0, - Schema: &structpb.Struct{}, - CreatedAt: timestamppb.Now(), - UpdatedAt: timestamppb.Now(), - Hash: "", - }) - } - - sort.Slice(results, func(i, j int) bool { - return results[i].Name < results[j].Name - }) - - return results, nil -} - -// GetRelationType, v2 backwards-compatibility accessor function, returns v2 RelationType by object type and relation name. -func (c *Cache) GetRelationType(objectType, relation string) (*dsc2.RelationType, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - on := model.ObjectName(objectType) - rn := model.RelationName(relation) - - o, ok := c.model.Objects[on] - if !ok { - return &dsc2.RelationType{}, derr.ErrObjectTypeNotFound.Msg(objectType) - } - - if _, ok := o.Relations[rn]; !ok { - return &dsc2.RelationType{}, derr.ErrRelationNotFound.Msg(objectType + ":" + relation) - } - - return &dsc2.RelationType{ - ObjectType: objectType, - Name: relation, - DisplayName: objectType + ":" + relation, - Ordinal: 0, - Status: 0, - Unions: c.getRelationUnions(o, on, rn), - Permissions: c.getRelationPermissions(o, rn), - CreatedAt: timestamppb.Now(), - UpdatedAt: timestamppb.Now(), - Hash: "", - }, nil -} - -func (*Cache) getRelationPermissions(o *model.Object, rn model.RelationName) []string { - permissions := []string{} - for pn, p := range o.Permissions { - union := lo.FilterMap(p.Union, func(r *model.PermissionTerm, _ int) (string, bool) { - if r.IsArrow() { - return "", false - } - return r.RelOrPerm.String(), true - }) - if lo.Contains(union, string(rn)) { - permissions = append(permissions, string(pn)) - } - } - return permissions -} - -func (*Cache) getRelationUnions(o *model.Object, on model.ObjectName, rn model.RelationName) []string { - unions := []string{} - for name, r := range o.Relations { - for _, rt := range r.Union { - if rt.IsSubject() && rt.Object == on && rt.Relation == rn { - unions = append(unions, string(name)) - } - } - } - return unions -} - -// GetRelationTypes, v2 backwards-compatibility accessor function, returns list of v2 RelationType instances, optionally filtered by by object type. -func (c *Cache) GetRelationTypes(objectType string) (RelationTypeSlice, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - results := []*dsc2.RelationType{} - - objectTypes := c.model.Objects - if objectType != "" { - if o, ok := c.model.Objects[model.ObjectName(objectType)]; !ok { - return results, derr.ErrObjectTypeNotFound.Msg(objectType) - } else { - objectTypes = map[model.ObjectName]*model.Object{ - model.ObjectName(objectType): o, - } - } - } - - for on, o := range objectTypes { - for rn := range o.Relations { - results = append(results, &dsc2.RelationType{ - ObjectType: string(on), - Name: string(rn), - DisplayName: string(on) + ":" + string(rn), - Ordinal: 0, - Status: 0, - Unions: c.getRelationUnions(o, on, rn), - Permissions: c.getRelationPermissions(o, rn), - CreatedAt: timestamppb.Now(), - UpdatedAt: timestamppb.Now(), - Hash: "", - }) - } - } - - sort.Slice(results, func(i, j int) bool { - iv, jv := results[i], results[j] - switch { - case iv.ObjectType != jv.ObjectType: - return iv.ObjectType < jv.ObjectType - default: - return iv.Name < jv.Name - } - }) - - return results, nil -} - -// GetPermission, v2 backwards-compatibility accessor function, returns v2 Permission by permission name. -func (c *Cache) GetPermission(permission string) (*dsc2.Permission, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - norm, _ := model.NormalizeIdentifier(permission) - pn := model.RelationName(norm) - - for _, o := range c.model.Objects { - if _, ok := o.Permissions[pn]; ok { - return &dsc2.Permission{ - Name: string(pn), - DisplayName: string(pn), - CreatedAt: timestamppb.Now(), - UpdatedAt: timestamppb.Now(), - Hash: "", - }, nil - } - } - - return &dsc2.Permission{}, derr.ErrPermissionNotFound.Msg(permission) -} - -// GetPermissions, v2 backwards-compatibility accessor function, returns list of v2 Permission instances. -func (c *Cache) GetPermissions() (PermissionSlice, error) { - c.mtx.RLock() - defer c.mtx.RUnlock() - - aggregator := []*dsc2.Permission{} - - ts := timestamppb.Now() - for _, o := range c.model.Objects { - for pn := range o.Permissions { - aggregator = append(aggregator, &dsc2.Permission{ - Name: string(pn), - DisplayName: string(pn), - CreatedAt: ts, - UpdatedAt: ts, - Hash: "", - }) - } - } - - results := lo.UniqBy(aggregator, func(i *dsc2.Permission) string { - return i.Name - }) - - sort.Slice(results, func(i, j int) bool { - return results[i].Name < results[j].Name - }) - - return results, nil -} - -func title(s string) string { - return cases.Title(language.AmericanEnglish, cases.NoLower).String(s) -} diff --git a/cache/metadata_test.go b/cache/metadata_test.go deleted file mode 100644 index 83867d8..0000000 --- a/cache/metadata_test.go +++ /dev/null @@ -1,161 +0,0 @@ -// nolint: staticcheck -package cache_test - -import ( - "encoding/json" - "os" - "testing" - - "github.com/aserto-dev/azm/cache" - "github.com/aserto-dev/azm/model" - "github.com/aserto-dev/azm/paging" - dsc2 "github.com/aserto-dev/go-directory/aserto/directory/common/v2" - "github.com/aserto-dev/go-directory/pkg/derr" - asserts "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// load model cache from serialized model file. -func loadModelCache(t *testing.T, path string) *cache.Cache { // nolint: unparam - r, err := os.Open(path) - require.NoError(t, err) - defer r.Close() - - var mc model.Model - dec := json.NewDecoder(r) - if err := dec.Decode(&mc); err != nil { - require.NoError(t, err) - } - - return cache.New(&mc) -} - -func TestGetObjectTypeV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - objectType, err := mc.GetObjectType("") - assert.Error(err, derr.ErrObjectTypeNotFound) - assert.Equal(&dsc2.ObjectType{}, objectType) - - objectType, err = mc.GetObjectType("foobar") - assert.Error(err, derr.ErrObjectTypeNotFound) - assert.Equal(&dsc2.ObjectType{}, objectType) - - objectType, err = mc.GetObjectType("tenant") - assert.NoError(err) - assert.Equal(objectType.Name, "tenant") -} - -func TestGetObjectTypesV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - objectTypes, err := mc.GetObjectTypes() - assert.NoError(err) - assert.Len(objectTypes, 11) - - testPagination(t, objectTypes) -} - -func TestGetRelationTypeV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - relationType, err := mc.GetRelationType("", "") - assert.Error(err, derr.ErrRelationTypeNotFound) - assert.Equal(&dsc2.RelationType{}, relationType) - - relationType, err = mc.GetRelationType("tenant", "") - assert.Error(err, derr.ErrObjectTypeNotFound) - assert.Equal(&dsc2.RelationType{}, relationType) - - relationType, err = mc.GetRelationType("tenant", "admin") - assert.NoError(err) - assert.Equal(relationType.ObjectType, "tenant") - assert.Equal(relationType.Name, "admin") - assert.Len(relationType.Unions, 2) - assert.Contains(relationType.Unions, "member") - assert.Contains(relationType.Unions, "viewer") - assert.Len(relationType.Permissions, 171) -} - -func TestGetRelationTypesV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - relationTypes, err := mc.GetRelationTypes("foobar") - assert.Error(err, derr.ErrObjectTypeNotFound) - assert.Len(relationTypes, 0) - testPagination(t, relationTypes) - - relationTypes, err = mc.GetRelationTypes("") - assert.NoError(err) - assert.Len(relationTypes, 23) - testPagination(t, relationTypes) - - relationTypes, err = mc.GetRelationTypes("tenant") - assert.NoError(err) - assert.Len(relationTypes, 10) - testPagination(t, relationTypes) -} - -func TestGetPermissionV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - permission, err := mc.GetPermission("") - assert.Error(err, derr.ErrPermissionNotFound) - assert.Equal(&dsc2.Permission{}, permission) - - permission, err = mc.GetPermission("foo.bar") - assert.Error(err, derr.ErrPermissionNotFound) - assert.Equal(&dsc2.Permission{}, permission) - - permission, err = mc.GetPermission("aserto.discovery.policy.v2.Discovery.OPAInstanceDiscovery") - assert.NoError(err) - assert.Equal(permission.Name, "aserto.discovery.policy.v2.discovery.opainstancediscovery") -} - -func TestGetPermissionsV2(t *testing.T) { - assert := asserts.New(t) - mc := loadModelCache(t, "./metadata_test.json") - - permissions, err := mc.GetPermissions() - assert.NoError(err) - assert.Len(permissions, 233) - testPagination(t, permissions) -} - -type Named interface { - GetName() string -} - -type PagingSlice[T any] interface { - ~[]T - Paginate(page *dsc2.PaginationRequest) (*paging.Result[T], error) -} - -func testPagination[T Named, S PagingSlice[T]](t *testing.T, slice S) { - assert := asserts.New(t) - for pageSize := 1; pageSize <= len(slice); pageSize++ { - page := &dsc2.PaginationRequest{Size: int32(pageSize)} - - current := 0 - for { - result, err := slice.Paginate(page) - assert.NoError(err) - - for i := 0; i < len(result.Items); i++ { - assert.Equal(result.Items[i].GetName(), slice[current].GetName()) - current++ - } - - if result.NextToken != "" { - page.Token = result.NextToken - } else { - break - } - } - } -} diff --git a/cache/metadata_test.json b/cache/metadata_test.json deleted file mode 100644 index 64f701c..0000000 --- a/cache/metadata_test.json +++ /dev/null @@ -1,4465 +0,0 @@ -{ - "version": 2, - "types": { - "application": { - "relations": { - "user": {} - } - }, - "group": { - "relations": { - "member": {} - } - }, - "identity": { - "relations": { - "identifier": {} - } - }, - "machine": {}, - "resource": {}, - "service": {}, - "system": { - "relations": { - "admin": {}, - "directory-reader": { - "union": [ - { - "object": "system", - "relation": "directory-writer" - } - ] - }, - "directory-store-reader": { - "union": [ - { - "object": "system", - "relation": "directory-store-writer" - } - ] - }, - "directory-store-writer": {}, - "directory-writer": {}, - "task-handler": {}, - "task-manager": {}, - "user": {} - }, - "permissions": { - "aserto.authorizer.authorizer.v1.authorizer.decisiontree": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.authorizer.v1.authorizer.is": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.authorizer.v1.authorizer.query": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.createtenant": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.createuser": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplpermission": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplproperty": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplrole": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteresource": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deletetenant": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuser": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserapplication": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserpermission": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserproperty": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserrole": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplpermissions": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplproperties": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplroles": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getidentity": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getresource": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuser": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserpermissions": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserproperties": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserroles": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getvalue": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listresources": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listtenants": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listuserapplications": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listusers": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.loadusers": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplpermission": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplpermissions": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplproperties": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplproperty": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplrole": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplroles": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setresource": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserpermission": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserpermissions": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserproperties": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserproperty": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserrole": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserroles": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.directory.v1.directory.updateuser": { - "union": [ - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.authorizer.policy.v1.policy.getmodule": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.policy.v1.policy.getpolicies": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.policy.v1.policy.listpolicies": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.getruntime": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.setloglevel": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.setupruntime": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.tenantconfig": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.unloadruntime": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.common.info.v1.config.get": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.common.info.v1.info.info": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.executequery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getdecisionlog": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getdecisions": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getuser": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.listdecisionlogs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.listusers": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.executequery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getdecisionlog": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getdecisions": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getuser": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.listdecisionlogs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.listusers": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.exporter.v2.exporter.export": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.importer.v2.importer.import": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.reader.v2.reader.checkpermission": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.checkrelation": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getgraph": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobject": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjectmany": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjects": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjecttype": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjecttypes": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getpermission": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getpermissions": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelation": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelations": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelationtype": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelationtypes": { - "union": [ - { - "rel_or_perm": "directory-reader" - } - ] - }, - "aserto.directory.store.v2.store.createtenant": { - "union": [ - { - "rel_or_perm": "directory-store-writer" - } - ] - }, - "aserto.directory.store.v2.store.deletetenant": { - "union": [ - { - "rel_or_perm": "directory-store-writer" - } - ] - }, - "aserto.directory.store.v2.store.gettenant": { - "union": [ - { - "rel_or_perm": "directory-store-reader" - } - ] - }, - "aserto.directory.store.v2.store.info": { - "union": [ - { - "rel_or_perm": "directory-store-writer" - } - ] - }, - "aserto.directory.store.v2.store.listtenants": { - "union": [ - { - "rel_or_perm": "directory-store-reader" - } - ] - }, - "aserto.directory.store.v2.store.migrateschema": { - "union": [ - { - "rel_or_perm": "directory-store-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.deleteobject": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.deleteobjecttype": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.deletepermission": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.deleterelation": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.deleterelationtype": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.setobject": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.setobjecttype": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.setpermission": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.setrelation": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.directory.writer.v2.writer.setrelationtype": { - "union": [ - { - "rel_or_perm": "directory-writer" - } - ] - }, - "aserto.discovery.policy.v1.discovery.opadiscovery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.discovery.policy.v2.discovery.opainstancediscovery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.funnel.v1.funnel.runworkflow": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.funnel.v1.funnel.startworkflow": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.funnel.v1.funnel.stopworkflow": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.system.aonadeleteorg": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.system.authorizerdeleteorg": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.system.harddeleteorg": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.system.tenantdeleteorg": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.getpolicystate": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.policy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.testwf": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.management.v2.controller.commandstream": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.management.v2.controlplane.execcommand": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.management.v2.controlplane.listinstanceregistrations": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.createimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.getreadaccesstoken": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.getwriteaccesstoken": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listdigests": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listimages": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listorgs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listpublicimages": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listpublicorgs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listtagswithdetails": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.removeimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.repoavailable": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.setimagevisibility": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.createpolicyimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.deletepolicyimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.getpolicyimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.listpolicyimages": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.listpublicpolicyimages": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.updatepolicyimage": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.createpolicyrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.deletepolicyrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.getpolicyrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.listpolicyrepos": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.listpublicpolicyrepos": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.updatepolicyrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.tenant.listpublictenants": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.tenant.listtenants": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.system.v2.tenantcache.invalidatesecretskey": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.task.handler.v1.handler.handlejob": { - "union": [ - { - "rel_or_perm": "task-handler" - } - ] - }, - "aserto.task.handler.v1.handler.handletask": { - "union": [ - { - "rel_or_perm": "task-handler" - } - ] - }, - "aserto.task.manager.v1.manager.createjob": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.createtask": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.deletejob": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.deletetask": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.execjob": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.exectask": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.getjob": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.task.manager.v1.manager.gettask": { - "union": [ - { - "rel_or_perm": "task-manager" - } - ] - }, - "aserto.tenant.account.v1.account.getaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.listinvites": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.signupaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.updateaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.connectionavailable": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.createconnection": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.deleteconnection": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.getconnection": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.listconnections": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.rotatesecret": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.updateconnection": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.verifyconnection": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.claimtenant": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.inviteuser": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.tenantavailable": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.createpolicyref": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.deletepolicyref": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.listpolicyrefs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.opadiscovery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.opainstancediscovery": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.updatepolicyref": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.createpolicybuilder": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.deletepolicybuilder": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.listpolicybuilders": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.getinvites": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.getprofile": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.inviteuser": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.removemember": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.respondtoinvite": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.getprovider": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.listproviderkinds": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.listproviders": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.clonerepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.createregistryrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.deleteregistryrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.getregistryrepotag": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listorgs": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepodigests": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepos": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepotags": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.registryrepoavailable": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.validpolicyregistryrepotag": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.createrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.getprofile": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.getrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.isrepoconnected": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listorg": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listrepo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listtemplates": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.deleteaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.deletetenant": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.getaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.getmachineaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.listaccounts": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.listdeletedtenants": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.listtenants": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.restoredeletedtenant": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.setaccountdeleted": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.setloglevel": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.system.v1.system.settenantdeleted": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.account.deleteaccount": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.createinstance": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.deleteinstance": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.listinstance": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.updateinstance": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.createpolicy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.deletepolicy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.getpolicy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.listpolicy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.policynameavailable": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.updatepolicy": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policystate.getpolicystate": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policystate.setpolicystate": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.createrepository": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.deleterepository": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.getrepository": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.updaterepository": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.createsource": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.deletesource": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.getsource": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.updatesource": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.tenant.deletetenant": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - }, - "grpc.reflection.v1alpha.serverreflection.serverreflectioninfo": { - "union": [ - { - "rel_or_perm": "admin" - } - ] - } - } - }, - "tenant": { - "relations": { - "account": {}, - "admin": { - "union": [ - { - "object": "tenant", - "relation": "owner" - } - ] - }, - "decision-log-reader": {}, - "directory-client-reader": { - "union": [ - { - "object": "tenant", - "relation": "directory-client-writer" - } - ] - }, - "directory-client-writer": {}, - "discovery-client": {}, - "edge-authorizer": {}, - "member": { - "union": [ - { - "object": "tenant", - "relation": "owner" - }, - { - "object": "tenant", - "relation": "admin" - } - ] - }, - "owner": {}, - "viewer": { - "union": [ - { - "object": "tenant", - "relation": "owner" - }, - { - "object": "tenant", - "relation": "member" - }, - { - "object": "tenant", - "relation": "admin" - } - ] - } - }, - "permissions": { - "aserto.authorizer.authorizer.v1.authorizer.decisiontree": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.authorizer.v1.authorizer.is": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.authorizer.v1.authorizer.query": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.createtenant": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.createuser": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplpermission": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplproperty": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteapplrole": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteresource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deletetenant": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuser": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserapplication": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserpermission": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserproperty": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.deleteuserrole": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplpermissions": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplproperties": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getapplroles": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getidentity": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getresource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuser": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserpermissions": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserproperties": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getuserroles": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.getvalue": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listresources": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listtenants": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listuserapplications": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.listusers": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.authorizer.directory.v1.directory.loadusers": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplpermission": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplpermissions": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplproperties": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplproperty": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplrole": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setapplroles": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setresource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserpermission": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserpermissions": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserproperties": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserproperty": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserrole": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.setuserroles": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.directory.v1.directory.updateuser": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.authorizer.system.v1.system.unloadruntime": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.common.info.v1.info.info": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.executequery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getdecisionlog": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getdecisions": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.getuser": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.listdecisionlogs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v1.decisionlogs.listusers": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.executequery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getdecisionlog": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getdecisions": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.getuser": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.listdecisionlogs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.decision_logs.v2.decisionlogs.listusers": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "decision-log-reader" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.exporter.v2.exporter.export": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.importer.v2.importer.import": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.reader.v2.reader.checkpermission": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.checkrelation": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getgraph": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobject": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjectmany": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjects": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjecttype": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getobjecttypes": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getpermission": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getpermissions": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelation": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelations": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelationtype": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.reader.v2.reader.getrelationtypes": { - "union": [ - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "directory-client-reader" - } - ] - }, - "aserto.directory.writer.v2.writer.deleteobject": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.deleteobjecttype": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.deletepermission": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.deleterelation": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.deleterelationtype": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.setobject": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.setobjecttype": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.setpermission": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.setrelation": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.directory.writer.v2.writer.setrelationtype": { - "union": [ - { - "rel_or_perm": "directory-client-writer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.discovery.policy.v1.discovery.opadiscovery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "discovery-client" - } - ] - }, - "aserto.discovery.policy.v2.discovery.opainstancediscovery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "discovery-client" - } - ] - }, - "aserto.funnel.v1.funnel.runworkflow": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.funnel.v1.funnel.startworkflow": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.funnel.v1.funnel.stopworkflow": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.getpolicystate": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.policy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.maestro.user.testwf": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.management.v2.controller.commandstream": { - "union": [ - { - "rel_or_perm": "edge-authorizer" - } - ] - }, - "aserto.management.v2.controlplane.execcommand": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.management.v2.controlplane.listinstanceregistrations": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.createimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.getreadaccesstoken": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.getwriteaccesstoken": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listdigests": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listimages": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listorgs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listpublicimages": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listpublicorgs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.listtagswithdetails": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.removeimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.repoavailable": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry.v1.registry.setimagevisibility": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.createpolicyimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.deletepolicyimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.getpolicyimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.listpolicyimages": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.listpublicpolicyimages": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policy.updatepolicyimage": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.createpolicyrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.deletepolicyrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.getpolicyrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.listpolicyrepos": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.policyrepo.updatepolicyrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.tenant.listpublictenants": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.registry_tenant.v1.tenant.listtenants": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.getaccount": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.listinvites": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.signupaccount": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.account.v1.account.updateaccount": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.connectionavailable": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.createconnection": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.deleteconnection": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.getconnection": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.listconnections": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.rotatesecret": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.updateconnection": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.connection.v1.connection.verifyconnection": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.claimtenant": { - "union": [ - { - "rel_or_perm": "owner" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.inviteuser": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.onboarding.v1.onboarding.tenantavailable": { - "union": [ - { - "rel_or_perm": "owner" - } - ] - }, - "aserto.tenant.policy.v1.policy.createpolicyref": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.deletepolicyref": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.listpolicyrefs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.opadiscovery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - }, - { - "rel_or_perm": "discovery-client" - } - ] - }, - "aserto.tenant.policy.v1.policy.opainstancediscovery": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy.v1.policy.updatepolicyref": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.createpolicybuilder": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.deletepolicybuilder": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.policy_builder.v1.policybuilder.listpolicybuilders": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.getinvites": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.getprofile": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.inviteuser": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.removemember": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.profile.v1.profile.respondtoinvite": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.getprovider": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.listproviderkinds": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.provider.v1.provider.listproviders": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.clonerepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.createregistryrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.deleteregistryrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.getregistryrepotag": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listorgs": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepodigests": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepos": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.listregistryrepotags": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.registryrepoavailable": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.registry.v1.registry.validpolicyregistryrepotag": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.createrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.getprofile": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.getrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.isrepoconnected": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listorg": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listrepo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.scc.v1.sourcecodectl.listtemplates": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.account.deleteaccount": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.createinstance": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.deleteinstance": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.listinstance": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.instance.updateinstance": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.createpolicy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.deletepolicy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.getpolicy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.listpolicy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.policynameavailable": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policy.updatepolicy": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policystate.getpolicystate": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.policystate.setpolicystate": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.createrepository": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.deleterepository": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.getrepository": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.repository.updaterepository": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.createsource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.deletesource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.getsource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.source.updatesource": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "aserto.tenant.v2.tenant.deletetenant": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "admin" - } - ] - }, - "grpc.reflection.v1alpha.serverreflection.serverreflectioninfo": { - "union": [ - { - "rel_or_perm": "owner" - }, - { - "rel_or_perm": "member" - }, - { - "rel_or_perm": "viewer" - }, - { - "rel_or_perm": "admin" - } - ] - } - } - }, - "tenant-name": { - "relations": { - "tenant": {} - } - }, - "user": { - "relations": { - "manager": {} - } - }, - "user-v1": {} - }, - "metadata": null -}