diff --git a/cmd/api/users.go b/cmd/api/users.go index f840a49..217a7ce 100644 --- a/cmd/api/users.go +++ b/cmd/api/users.go @@ -53,6 +53,12 @@ func (app *application) registerUserHandler(w http.ResponseWriter, r *http.Reque return } + err = app.models.Permissions.AddForUser(user.ID, "movies:read") + if err != nil { + app.serverErrorResponse(w, r, err) + return + } + token, err := app.models.Tokens.New(user.ID, 3*24*time.Hour, data.ScopeActivation) if err != nil { app.serverErrorResponse(w, r, err) diff --git a/internal/data/permissions.go b/internal/data/permissions.go index 276df41..dd60552 100644 --- a/internal/data/permissions.go +++ b/internal/data/permissions.go @@ -4,6 +4,8 @@ import ( "context" "database/sql" "time" + + "github.com/lib/pq" ) type Permissions []string @@ -55,3 +57,15 @@ func (m PermissionModel) GetAllForUser(userID int64) (Permissions, error) { return permissions, nil } + +func (m PermissionModel) AddForUser(userID int64, codes ...string) error { + query := ` + INSERT INTO users_permissions + SELECT $1, permissions.id FROM permissions WHERE permissions.code = ANY($2)` + + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + + _, err := m.DB.ExecContext(ctx, query, userID, pq.Array(codes)) + return err +}