mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-06 03:31:02 -06:00
[server][cmd] Populate newly created resources with parent permissions
This commit is contained in:
@@ -126,6 +126,7 @@ func (r Resource) Copy(target string, id uuid.UUID, recursive bool, conflictReso
|
||||
r.contentType,
|
||||
r.contentSHA256,
|
||||
conflictResolution,
|
||||
r.permissions,
|
||||
)
|
||||
// createResource may return an already existing resources, depending on the specified conflictResolution
|
||||
id = res.id
|
||||
|
||||
@@ -54,7 +54,7 @@ func (r Resource) CreateMemberResource(name string, id uuid.UUID, dir bool, conf
|
||||
var created bool
|
||||
err := r.f.runInTx(func(f filesystem) error {
|
||||
var err error
|
||||
if res, created, _, err = f.createResource(id, r.id, name, dir, 0, emptyContentType, emptyContentSHA256, conflictResolution); err != nil {
|
||||
if res, created, _, err = f.createResource(id, r.id, name, dir, 0, emptyContentType, emptyContentSHA256, conflictResolution, r.permissions); err != nil {
|
||||
return err
|
||||
} else if created {
|
||||
if err := f.db.RecomputePermissions(f.ctx, id); err != nil {
|
||||
@@ -94,6 +94,7 @@ func (f filesystem) createResource(
|
||||
contentType string,
|
||||
contentSHA256 string,
|
||||
conflictResolution ResourceBindConflictResolution,
|
||||
permissions []byte,
|
||||
) (res Resource, created, deleted bool, err error) {
|
||||
err = f.runInTx(func(f filesystem) error {
|
||||
res, err = f.insertResource(
|
||||
@@ -104,6 +105,7 @@ func (f filesystem) createResource(
|
||||
contentLength,
|
||||
contentType,
|
||||
contentSHA256,
|
||||
permissions,
|
||||
)
|
||||
return err
|
||||
})
|
||||
@@ -135,6 +137,7 @@ func (f filesystem) createResource(
|
||||
contentLength,
|
||||
contentType,
|
||||
contentSHA256,
|
||||
permissions,
|
||||
)
|
||||
return err
|
||||
})
|
||||
@@ -178,6 +181,7 @@ func (f filesystem) createResource(
|
||||
contentType,
|
||||
contentSHA256,
|
||||
ResourceBindConflictResolutionError,
|
||||
permissions,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -197,6 +201,7 @@ func (f filesystem) createResource(
|
||||
contentType,
|
||||
contentSHA256,
|
||||
ResourceBindConflictResolutionError,
|
||||
permissions,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -208,7 +213,7 @@ func (f filesystem) createResource(
|
||||
return
|
||||
}
|
||||
|
||||
func (f filesystem) insertResource(id, parent uuid.UUID, name string, dir bool, contentLength int64, contentType, contentSha256 string) (Resource, error) {
|
||||
func (f filesystem) insertResource(id, parent uuid.UUID, name string, dir bool, contentLength int64, contentType, contentSha256 string, permissions []byte) (Resource, error) {
|
||||
query, args, _ := pg.From("resources").
|
||||
Insert().
|
||||
Rows(goqu.Record{
|
||||
@@ -219,6 +224,7 @@ func (f filesystem) insertResource(id, parent uuid.UUID, name string, dir bool,
|
||||
"content_length": goqu.V(contentLength),
|
||||
"content_type": goqu.V(contentType),
|
||||
"content_sha256": goqu.V(contentSha256),
|
||||
"permissions": goqu.V(permissions),
|
||||
}).
|
||||
Returning("*").
|
||||
ToSQL()
|
||||
|
||||
@@ -57,7 +57,7 @@ func (f filesystem) collectResource(rows pgx.Rows) (Resource, error) {
|
||||
}
|
||||
|
||||
func (f filesystem) scanResource(row pgx.CollectableRow) (Resource, error) {
|
||||
var r Resource
|
||||
r := Resource{f: f}
|
||||
err := row.Scan(
|
||||
&r.id,
|
||||
&r.name,
|
||||
@@ -86,7 +86,6 @@ func (f filesystem) scanResource(row pgx.CollectableRow) (Resource, error) {
|
||||
if permission&PermissionRead == 0 {
|
||||
return Resource{}, ErrResourceNotFound
|
||||
}
|
||||
r.f = f
|
||||
r.userPermission = permission
|
||||
return r, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user