Skip to content

Commit 443f180

Browse files
committed
Add some experimental manager perms methods
1 parent 283cef6 commit 443f180

File tree

5 files changed

+56
-0
lines changed

5 files changed

+56
-0
lines changed

schema/manager.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ package schema
33
type Manager interface {
44
Create() Instance
55
GetFilterForUser(User, int) ([]string, []interface{})
6+
7+
BeforeCreate(Context, map[string]interface{}) error
8+
BeforeUpdate(Context, map[string]interface{}, map[string]interface{}) error
9+
BeforeSave(Context, map[string]interface{}) error
610
}
711

812
type ManagerStub struct {
@@ -11,3 +15,19 @@ type ManagerStub struct {
1115
func (stub ManagerStub) GetFilterForUser(user User, nextArg int) ([]string, []interface{}) {
1216
return []string{}, []interface{}{}
1317
}
18+
19+
func (stub ManagerStub) BeforeCreate(c Context, values map[string]interface{}) error {
20+
return nil
21+
}
22+
func (stub ManagerStub) BeforeUpdate(
23+
c Context,
24+
oldValues map[string]interface{},
25+
newValues map[string]interface{},
26+
) (
27+
error,
28+
) {
29+
return nil
30+
}
31+
func (stub ManagerStub) BeforeSave(c Context, values map[string]interface{}) error {
32+
return nil
33+
}

servers/detail.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ func DetailHandler(s schema.Server, m *schema.Model, w http.ResponseWriter, r *h
3232
detailPATCH(w, r, rc, m, id, include)
3333
} else if r.Method == "GET" {
3434
detailGET(w, r, rc, m, id, include)
35+
} else {
36+
MethodNotAllowed(rc, w)
3537
}
3638

3739
rc.LogStats()

servers/exceptions.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package servers
33
import (
44
"github.com/bor3ham/reja/schema"
55
"net/http"
6+
"fmt"
67
)
78

89
type Error struct {
@@ -38,3 +39,19 @@ func Forbidden(c schema.Context, w http.ResponseWriter, title string, detail str
3839
w.WriteHeader(http.StatusForbidden)
3940
c.WriteToResponse(errorBlob)
4041
}
42+
43+
func MethodNotAllowed(c schema.Context, w http.ResponseWriter) {
44+
errorBlob := Error{
45+
Exceptions: []Exception{
46+
Exception{
47+
Title: "Method Not Allowed",
48+
Detail: fmt.Sprintf(
49+
"This endpoint does not support %s requests.",
50+
c.GetRequest().Method,
51+
),
52+
},
53+
},
54+
}
55+
w.WriteHeader(http.StatusForbidden)
56+
c.WriteToResponse(errorBlob)
57+
}

servers/list.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ func ListHandler(s schema.Server, m *schema.Model, w http.ResponseWriter, r *htt
2727
listPOST(w, r, rc, m, queryStrings, include)
2828
} else if r.Method == "GET" {
2929
listGET(w, r, rc, m, queryStrings, include)
30+
} else {
31+
MethodNotAllowed(rc, w)
3032
}
3133

3234
rc.LogStats()

servers/list_post.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,21 @@ func listPOST(
8585
valueIndex += 1
8686
}
8787

88+
// run manager validation
89+
mapValues = mapFromValues(values, m.Attributes, m.Relationships)
90+
// instance = m.Manager.Create()
91+
// instance.SetValues(mapValues)
92+
err = m.Manager.BeforeCreate(c, mapValues)
93+
if err != nil {
94+
BadRequest(c, w, "Bad New Instance", err.Error())
95+
return
96+
}
97+
err = m.Manager.BeforeSave(c, mapValues)
98+
if err != nil {
99+
BadRequest(c, w, "Bad Instance", err.Error())
100+
return
101+
}
102+
88103
// build insert query
89104
var insertColumns []string
90105
var insertValues []interface{}

0 commit comments

Comments
 (0)