Skip to content

Commit

Permalink
fix lint errors
Browse files Browse the repository at this point in the history
  • Loading branch information
yissellokta committed Feb 20, 2025
1 parent 5773124 commit b6c7161
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 39 deletions.
49 changes: 15 additions & 34 deletions pkg/go/graph/graph_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func checkRewrite(graphBuilder *AuthorizationModelGraphBuilder, parentNode *Auth
}
}

func parseThis(graphBuilder *AuthorizationModelGraphBuilder, parentNode graph.Node, typeDef *openfgav1.TypeDefinition, relation string) error {
func parseThis(graphBuilder *AuthorizationModelGraphBuilder, parentNode graph.Node, typeDef *openfgav1.TypeDefinition, relation string) {
directlyRelated := make([]*openfgav1.RelationReference, 0)
var curNode *AuthorizationModelNode

Expand Down Expand Up @@ -146,12 +146,8 @@ func parseThis(graphBuilder *AuthorizationModelGraphBuilder, parentNode graph.No

// de-dup types that are conditioned, e.g. if define viewer: [user, user with condX]
// we only draw one edge from user to x#viewer, but with two conditions: none and condX
_, err := graphBuilder.upsertEdge(curNode, parentNode, DirectEdge, "", directlyRelatedDef.Condition)
if err != nil {
return err
}
graphBuilder.upsertEdge(curNode, parentNode, DirectEdge, "", directlyRelatedDef.GetCondition())
}
return nil
}

func parseComputed(graphBuilder *AuthorizationModelGraphBuilder, parentNode *AuthorizationModelNode, typeDef *openfgav1.TypeDefinition, relation string) {
Expand All @@ -167,7 +163,7 @@ func parseComputed(graphBuilder *AuthorizationModelGraphBuilder, parentNode *Aut
graphBuilder.AddEdge(newNode, parentNode, nodeType, "", "")
}

func parseTupleToUserset(graphBuilder *AuthorizationModelGraphBuilder, parentNode graph.Node, model *openfgav1.AuthorizationModel, typeDef *openfgav1.TypeDefinition, rewrite *openfgav1.TupleToUserset) error {
func parseTupleToUserset(graphBuilder *AuthorizationModelGraphBuilder, parentNode graph.Node, model *openfgav1.AuthorizationModel, typeDef *openfgav1.TypeDefinition, rewrite *openfgav1.TupleToUserset) {
// e.g. define viewer: admin from parent
// "parent" is the tupleset
tuplesetRelation := rewrite.GetTupleset().GetRelation()
Expand All @@ -181,7 +177,6 @@ func parseTupleToUserset(graphBuilder *AuthorizationModelGraphBuilder, parentNod
}

for _, relatedType := range directlyRelated {

tuplesetType := relatedType.GetType()

if !typeAndRelationExists(model, tuplesetType, computedRelation) {
Expand All @@ -192,11 +187,7 @@ func parseTupleToUserset(graphBuilder *AuthorizationModelGraphBuilder, parentNod
nodeSource := graphBuilder.getOrAddNode(rewrittenNodeName, rewrittenNodeName, SpecificTypeAndRelation)
typeTuplesetRelation := fmt.Sprintf("%s#%s", typeDef.GetType(), tuplesetRelation)

ok, err := graphBuilder.hasEdge(nodeSource, parentNode, TTUEdge, typeTuplesetRelation)
if err != nil {
return err
}
if ok {
if graphBuilder.hasEdge(nodeSource, parentNode, TTUEdge, typeTuplesetRelation) {
// de-dup types that are conditioned, e.g. if define viewer: [user, user with condX]
// we only draw one edge from user to x#viewer
continue
Expand All @@ -205,7 +196,6 @@ func parseTupleToUserset(graphBuilder *AuthorizationModelGraphBuilder, parentNod
// new edge from "xxx#admin" to "yyy#viewer" tuplesetRelation on "yyy#parent"
graphBuilder.upsertEdge(nodeSource, parentNode, TTUEdge, typeTuplesetRelation, relatedType.GetCondition())
}
return nil
}

func (g *AuthorizationModelGraphBuilder) getOrAddNode(uniqueLabel, label string, nodeType NodeType) *AuthorizationModelNode {
Expand Down Expand Up @@ -257,53 +247,44 @@ func (g *AuthorizationModelGraphBuilder) AddEdge(from, to graph.Node, edgeType E
return newLine
}

func (g *AuthorizationModelGraphBuilder) upsertEdge(from, to graph.Node, edgeType EdgeType, tuplesetRelation string, condition string) (*AuthorizationModelEdge, error) {
func (g *AuthorizationModelGraphBuilder) upsertEdge(from, to graph.Node, edgeType EdgeType, tuplesetRelation string, condition string) {
if from == nil || to == nil {
return nil, nil
return
}

iter := g.Lines(from.ID(), to.ID())
for iter.Next() {
l := iter.Line()
edge, ok := l.(*AuthorizationModelEdge)
if !ok {
// if it is not a valid AuthorizationModelEdge then return error
return nil, ErrBuildingGraph
}
edge, _ := l.(*AuthorizationModelEdge)
if edge.edgeType == edgeType && edge.tuplesetRelation == tuplesetRelation {
for _, cond := range edge.conditions {
if cond == condition {
return edge, nil
return
}
}
edge.conditions = append(edge.conditions, condition)
return edge, nil
return
}
}

return g.AddEdge(from, to, edgeType, tuplesetRelation, condition), nil

g.AddEdge(from, to, edgeType, tuplesetRelation, condition)
}

func (g *AuthorizationModelGraphBuilder) hasEdge(from, to graph.Node, edgeType EdgeType, tuplesetRelation string) (bool, error) {
func (g *AuthorizationModelGraphBuilder) hasEdge(from, to graph.Node, edgeType EdgeType, tuplesetRelation string) bool {
if from == nil || to == nil {
return false, nil
return false
}

iter := g.Lines(from.ID(), to.ID())
for iter.Next() {
l := iter.Line()
edge, ok := l.(*AuthorizationModelEdge)
if !ok {
// if it is not a valid AuthorizationModelEdge then return error
return false, ErrBuildingGraph
}
edge, _ := l.(*AuthorizationModelEdge)
if edge.edgeType == edgeType && edge.tuplesetRelation == tuplesetRelation {
return true, nil
return true
}
}

return false, nil
return false
}

func typeAndRelationExists(model *openfgav1.AuthorizationModel, typeName, relation string) bool {
Expand Down
6 changes: 3 additions & 3 deletions pkg/go/graph/graph_edge.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ const (
RewriteEdge EdgeType = 1
TTUEdge EdgeType = 2
ComputedEdge EdgeType = 3
// when an edge does not have cond in the model, it will have a condition with value none.
// this is required to differentiate when an edge need to support condition and no condition
// When an edge does not have cond in the model, it will have a condition with value none.
// This is required to differentiate when an edge need to support condition and no condition
// like define rel1: [user, user with condX], in this case the edge will have [none, condX]
// or an edge needs to support only condition like define rel1: [user with condX], the edge will have [condX]
// in the case the edge does not have any condition like define rel1: [user], the edge will have [none]
// in the case the edge does not have any condition like define rel1: [user], the edge will have [none].
NoCond string = "none"
)

Expand Down
3 changes: 1 addition & 2 deletions pkg/go/graph/weighted_graph_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ func TestValidConditionalGraphModel(t *testing.T) {
edges, _ := graph.GetEdgesFromNode(graph.nodes["permission#assignee"])
require.Len(t, edges, 1)
conditions := edges[0].conditions
require.Len(t, edges[0].tuplesetRelation, 0)
require.Empty(t, edges[0].tuplesetRelation)
require.Len(t, conditions, 2)
edges, _ = graph.GetEdgesFromNode(graph.nodes["job#can_read"])
require.Len(t, edges, 1)
Expand Down Expand Up @@ -584,5 +584,4 @@ func TestValidConditionalGraphModel(t *testing.T) {
require.Equal(t, Infinite, graph.nodes["permission#member"].weights["user"])
require.Equal(t, Infinite, graph.nodes["job#can_view"].weights["user"])
require.Equal(t, 1, graph.nodes["job#owner"].weights["job"])

}

0 comments on commit b6c7161

Please sign in to comment.