diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
| commit | 20ef0d92694465ac86b550df139e8366a0a2b4fa (patch) | |
| tree | 3f14589e1ce6eb9306a3af31c3a1f9e1af5ed637 /vendor/github.com/authzed/zed/internal/printers/tree.go | |
| parent | 44e0d272c040cdc53a98b9f1dc58ae7da67752e6 (diff) | |
feat: connect to spicedb
Diffstat (limited to 'vendor/github.com/authzed/zed/internal/printers/tree.go')
| -rw-r--r-- | vendor/github.com/authzed/zed/internal/printers/tree.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/vendor/github.com/authzed/zed/internal/printers/tree.go b/vendor/github.com/authzed/zed/internal/printers/tree.go new file mode 100644 index 0000000..b787210 --- /dev/null +++ b/vendor/github.com/authzed/zed/internal/printers/tree.go @@ -0,0 +1,66 @@ +package printers + +import ( + "fmt" + + "github.com/jzelinskie/stringz" + + v1 "github.com/authzed/authzed-go/proto/authzed/api/v1" +) + +func prettySubject(subj *v1.SubjectReference) string { + if subj.OptionalRelation == "" { + return fmt.Sprintf( + "%s:%s", + stringz.TrimPrefixIndex(subj.Object.ObjectType, "/"), + subj.Object.ObjectId, + ) + } + return fmt.Sprintf( + "%s:%s->%s", + stringz.TrimPrefixIndex(subj.Object.ObjectType, "/"), + subj.Object.ObjectId, + subj.OptionalRelation, + ) +} + +// TreeNodeTree walks an Authzed Tree Node and creates corresponding nodes +// for a treeprinter. +func TreeNodeTree(tp *TreePrinter, treeNode *v1.PermissionRelationshipTree) { + if treeNode.ExpandedObject != nil { + tp = tp.Child(fmt.Sprintf( + "%s:%s->%s", + stringz.TrimPrefixIndex(treeNode.ExpandedObject.ObjectType, "/"), + treeNode.ExpandedObject.ObjectId, + treeNode.ExpandedRelation, + )) + } + switch typed := treeNode.TreeType.(type) { + case *v1.PermissionRelationshipTree_Intermediate: + switch typed.Intermediate.Operation { + case v1.AlgebraicSubjectSet_OPERATION_UNION: + union := tp.Child("union") + for _, child := range typed.Intermediate.Children { + TreeNodeTree(union, child) + } + case v1.AlgebraicSubjectSet_OPERATION_INTERSECTION: + intersection := tp.Child("intersection") + for _, child := range typed.Intermediate.Children { + TreeNodeTree(intersection, child) + } + case v1.AlgebraicSubjectSet_OPERATION_EXCLUSION: + exclusion := tp.Child("exclusion") + for _, child := range typed.Intermediate.Children { + TreeNodeTree(exclusion, child) + } + default: + panic("unknown expand operation") + } + case *v1.PermissionRelationshipTree_Leaf: + for _, subject := range typed.Leaf.Subjects { + tp.Child(prettySubject(subject)) + } + default: + panic("unknown TreeNode type") + } +} |
