Update resource owner

This commit is contained in:
Abhishek Shroff
2024-08-06 23:04:54 +05:30
parent 70c1b0a041
commit a9e45ddbc2
4 changed files with 108 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ type FileSystem interface {
UpdateName(r Resource, name string) error
UpdateParent(r Resource, parent uuid.UUID) error
UpdatePermissions(r Resource, userID int32, permission int32) error
UpdateOwner(r Resource, userID int32) error
}
var rootUUID = uuid.UUID{}
@@ -275,3 +276,14 @@ func (f filesystem) UpdatePermissions(r Resource, userID int32, permission int32
Permission: permission,
})
}
func (f filesystem) UpdateOwner(r Resource, userID int32) error {
if r.Owner() != f.user {
return ErrInsufficientPermissions
}
return f.db.Queries().UpdateResourceOwner(f.ctx, sql.UpdateResourceOwnerParams{
ID: r.ID(),
Owner: userID,
})
}

View File

@@ -26,6 +26,7 @@ func setupResourceCommand() *cobra.Command {
setupResourceMkdirCommand(),
setupResourceRmCommand(),
setupResourceLsCommand(),
setupResourceChownCommand(),
}...)
return cmd
}
@@ -177,6 +178,76 @@ func setupResourceLsCommand() *cobra.Command {
return &cmd
}
func setupResourceChownCommand() *cobra.Command {
cmd := cobra.Command{
Use: "chown user <path | uuid>",
Short: "Change Resource Owner",
Args: cobra.ExactArgs(2),
PreRun: func(cmd *cobra.Command, args []string) {
readUserIDFromFlagsreadUsername(cmd)
},
Run: func(cmd *cobra.Command, args []string) {
username := args[0]
var owner int32
if user, err := app.Default.UserByUsername(context.Background(), username); err != nil {
logrus.Fatal(err)
} else {
owner = user.ID()
}
path := args[1]
fs, err := app.Default.OpenFileSystem(context.Background(), userID)
if err != nil {
logrus.Fatal(err)
}
var r core.Resource
if path[0] != '/' {
var id uuid.UUID
var err error
if id, err = uuid.Parse(path); err != nil {
logrus.Fatal(err)
}
if r, err = fs.ResourceByID(id); err != nil {
if errors.Is(err, iofs.ErrNotExist) {
logrus.Fatal("Resource not found: " + path)
} else {
logrus.Fatal(err.Error())
}
}
} else {
var err error
if r, err = fs.ResourceByPath(path); err != nil {
if errors.Is(err, iofs.ErrNotExist) {
logrus.Fatal("Resource not found: " + path)
} else {
logrus.Fatal(err.Error())
}
}
}
if err := fs.UpdateOwner(r, owner); err != nil {
logrus.Fatal(err)
}
// if r.IsDir() {
// if recursive, err := cmd.Flags().GetBool("recursive"); err != nil {
// logrus.Fatal("Must use -r to delete collections")
// } else {
// if recursive {
// } else {
// }
// }
// }
},
}
// flags := cmd.Flags()
// flags.BoolP("recursive", "r", false, "Recursively change ownership")
setupUsernameFlags(&cmd)
return &cmd
}
func readUserIDFromFlagsreadUsername(cmd *cobra.Command) {
if value, err := cmd.Flags().GetInt32("user"); err != nil {
logrus.Fatal(err)

View File

@@ -182,6 +182,24 @@ func (q *Queries) UpdateResourceName(ctx context.Context, arg UpdateResourceName
return err
}
const updateResourceOwner = `-- name: UpdateResourceOwner :exec
UPDATE resources
SET
owner = $1::int,
modified = NOW()
WHERE id = $2::uuid
`
type UpdateResourceOwnerParams struct {
Owner int32
ID uuid.UUID
}
func (q *Queries) UpdateResourceOwner(ctx context.Context, arg UpdateResourceOwnerParams) error {
_, err := q.db.Exec(ctx, updateResourceOwner, arg.Owner, arg.ID)
return err
}
const updateResourceParent = `-- name: UpdateResourceParent :exec
UPDATE resources
SET

View File

@@ -29,6 +29,13 @@ SET
modified = NOW()
WHERE id = @id::uuid;
-- name: UpdateResourceOwner :exec
UPDATE resources
SET
owner = @owner::int,
modified = NOW()
WHERE id = @id::uuid;
-- name: UpdateResourceName :exec
UPDATE resources
SET