Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions admin/canvas.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package admin

import (
"context"

"github.com/rilldata/rill/admin/database"
runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1"
"github.com/rilldata/rill/runtime"
)

// LookupCanvas fetches a canvas's spec from a runtime deployment.
func (s *Service) LookupCanvas(ctx context.Context, depl *database.Deployment, canvasName string) (*runtimev1.CanvasSpec, error) {
rt, err := s.OpenRuntimeClient(depl)
if err != nil {
return nil, err
}
defer rt.Close()

res, err := rt.GetResource(ctx, &runtimev1.GetResourceRequest{
InstanceId: depl.RuntimeInstanceID,
Name: &runtimev1.ResourceName{
Kind: runtime.ResourceKindCanvas,
Name: canvasName,
},
})
if err != nil {
return nil, err
}

return res.Resource.Resource.(*runtimev1.Resource_Canvas).Canvas.Spec, nil
}
2 changes: 2 additions & 0 deletions admin/database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ type DB interface {

FindVirtualFiles(ctx context.Context, projectID, environment string, afterUpdatedOn time.Time, afterPath string, limit int) ([]*VirtualFile, error)
FindVirtualFile(ctx context.Context, projectID, environment, path string) (*VirtualFile, error)
FindVirtualFilesByPrefix(ctx context.Context, projectID, environment, pathPrefix string) ([]*VirtualFile, error)
UpsertVirtualFile(ctx context.Context, opts *InsertVirtualFileOptions) error
UpdateVirtualFileDeleted(ctx context.Context, projectID, environment, path string) error
DeleteExpiredVirtualFiles(ctx context.Context, retention time.Duration) error
Expand Down Expand Up @@ -1002,6 +1003,7 @@ type ProjectRole struct {
ManageAlerts bool `db:"manage_alerts"`
CreateBookmarks bool `db:"create_bookmarks"`
ManageBookmarks bool `db:"manage_bookmarks"`
CreatePersonalCanvases bool `db:"create_personal_canvases"`
}

// UserProjectRole represents a user's project role plus resource scoping metadata.
Expand Down
2 changes: 2 additions & 0 deletions admin/database/postgres/migrations/0094.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE project_roles ADD create_personal_canvases BOOLEAN NOT NULL DEFAULT false;
UPDATE project_roles SET create_personal_canvases = read_prod;
16 changes: 16 additions & 0 deletions admin/database/postgres/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -2906,6 +2906,22 @@ func (c *connection) FindVirtualFile(ctx context.Context, projectID, environment
return res, nil
}

// FindVirtualFilesByPrefix returns all non-deleted virtual files whose path starts with pathPrefix.
// Intended for listing personal virtual files scoped to a user's directory (e.g. "personal/canvases/{user_id}/").
func (c *connection) FindVirtualFilesByPrefix(ctx context.Context, projectID, environment, pathPrefix string) ([]*database.VirtualFile, error) {
var res []*database.VirtualFile
err := c.getDB(ctx).SelectContext(ctx, &res, `
SELECT path, data, deleted, updated_on
FROM virtual_files
WHERE project_id=$1 AND environment=$2 AND deleted=FALSE AND path LIKE $3 || '%'
ORDER BY path
`, projectID, environment, pathPrefix)
if err != nil {
return nil, parseErr("virtual files", err)
}
return res, nil
}

func (c *connection) UpsertVirtualFile(ctx context.Context, opts *database.InsertVirtualFileOptions) error {
if err := database.Validate(opts); err != nil {
return err
Expand Down
5 changes: 5 additions & 0 deletions admin/permissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ func (s *Service) ProjectPermissionsForUser(ctx context.Context, projectID, user
ManageAlerts: true,
CreateBookmarks: true,
ManageBookmarks: true,
CreatePersonalCanvases: true,
}, nil
}

Expand Down Expand Up @@ -173,6 +174,7 @@ func (s *Service) ProjectPermissionsForService(ctx context.Context, projectID, s
ManageAlerts: true,
CreateBookmarks: true,
ManageBookmarks: true,
CreatePersonalCanvases: false,
}, nil
}

Expand Down Expand Up @@ -229,6 +231,7 @@ func (s *Service) ProjectPermissionsForDeployment(ctx context.Context, projectID
ManageAlerts: false,
CreateBookmarks: false,
ManageBookmarks: false,
CreatePersonalCanvases: false,
}, nil
}

Expand Down Expand Up @@ -266,6 +269,7 @@ func (s *Service) ProjectPermissionsForMagicAuthToken(ctx context.Context, proje
ManageAlerts: false,
CreateBookmarks: false,
ManageBookmarks: false,
CreatePersonalCanvases: false,
}, nil
}

Expand Down Expand Up @@ -310,5 +314,6 @@ func UnionProjectRoles(a *adminv1.ProjectPermissions, b *database.ProjectRole) *
ManageAlerts: a.ManageAlerts || b.ManageAlerts,
CreateBookmarks: a.CreateBookmarks || b.CreateBookmarks,
ManageBookmarks: a.ManageBookmarks || b.ManageBookmarks,
CreatePersonalCanvases: a.CreatePersonalCanvases || b.CreatePersonalCanvases,
}
}
Loading