diff options
| author | mo khan <mo@mokhan.ca> | 2025-04-02 09:45:37 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-04-02 09:45:37 -0600 |
| commit | c75ceda92ce98c654747457c4fdfd32766487653 (patch) | |
| tree | 7af774e87806f9522930a51d1d08ef67b9ece602 /pkg/rpc | |
| parent | c851e7d0ff5cbc33dfec8df068529aeb2c70ebfc (diff) | |
feat: embed cedar policies in policies package
Diffstat (limited to 'pkg/rpc')
| -rw-r--r-- | pkg/rpc/ability_handler.go | 17 | ||||
| -rw-r--r-- | pkg/rpc/server.go | 2 | ||||
| -rw-r--r-- | pkg/rpc/server_test.go | 12 |
3 files changed, 26 insertions, 5 deletions
diff --git a/pkg/rpc/ability_handler.go b/pkg/rpc/ability_handler.go index b36ce14e..973e1db8 100644 --- a/pkg/rpc/ability_handler.go +++ b/pkg/rpc/ability_handler.go @@ -2,14 +2,25 @@ package rpc import ( context "context" + + "github.com/cedar-policy/cedar-go" + "gitlab.com/mokhax/spike/pkg/policies" ) type AbilityHandler struct { UnimplementedAbilityServer } +func NewAbilityHandler() *AbilityHandler { + return &AbilityHandler{} +} + func (h *AbilityHandler) Allowed(ctx context.Context, req *AllowRequest) (*AllowReply, error) { - return &AllowReply{ - Result: false, - }, nil + ok := policies.Allowed(cedar.Request{ + Principal: cedar.NewEntityUID("User", cedar.String(req.Subject)), + Action: cedar.NewEntityUID("Action", cedar.String(req.Permission)), + Resource: cedar.NewEntityUID("Album", cedar.String(req.Resource)), + Context: cedar.NewRecord(cedar.RecordMap{}), + }) + return &AllowReply{Result: ok}, nil } diff --git a/pkg/rpc/server.go b/pkg/rpc/server.go index c78b5d42..90bfdaf9 100644 --- a/pkg/rpc/server.go +++ b/pkg/rpc/server.go @@ -6,6 +6,6 @@ import ( func New(options ...grpc.ServerOption) *grpc.Server { server := grpc.NewServer(options...) - RegisterAbilityServer(server, &AbilityHandler{}) + RegisterAbilityServer(server, NewAbilityHandler()) return server } diff --git a/pkg/rpc/server_test.go b/pkg/rpc/server_test.go index 0ae0f013..266f1434 100644 --- a/pkg/rpc/server_test.go +++ b/pkg/rpc/server_test.go @@ -31,7 +31,7 @@ func TestServer(t *testing.T) { defer connection.Close() client := NewAbilityClient(connection) - t.Run("returns a result", func(t *testing.T) { + t.Run("returns false", func(t *testing.T) { reply, err := client.Allowed(t.Context(), &AllowRequest{ Subject: "", Permission: "", @@ -40,4 +40,14 @@ func TestServer(t *testing.T) { require.NoError(t, err) assert.False(t, reply.Result) }) + + t.Run("returns true", func(t *testing.T) { + reply, err := client.Allowed(t.Context(), &AllowRequest{ + Subject: "alice", + Permission: "view", + Resource: "jane_vacation", + }) + require.NoError(t, err) + assert.True(t, reply.Result) + }) } |
