More work on perms page

This commit is contained in:
simon987
2019-02-17 14:09:52 -05:00
parent b936513eb9
commit 94c3ce3267
30 changed files with 425 additions and 70 deletions

View File

@@ -155,6 +155,32 @@ func (api *WebAPI) GetManagerList(r *Request) {
})
}
func (api *WebAPI) GetManagerListWithRoleOn(r *Request) {
pid, err := strconv.ParseInt(r.Ctx.UserValue("id").(string), 10, 64)
handleErr(err, r) //todo handle invalid id
sess := api.Session.StartFasthttp(r.Ctx)
manager := sess.Get("manager")
if manager == nil {
r.Json(JsonResponse{
Ok: false,
Message: "Unauthorized",
}, 401)
return
}
managers := api.Database.GetManagerListWithRoleOn(pid)
r.OkJson(JsonResponse{
Ok: true,
Content: GetManagerListWithRoleOnResponse{
Managers: managers,
},
})
}
func (api *WebAPI) PromoteManager(r *Request) {
id, err := strconv.ParseInt(r.Ctx.UserValue("id").(string), 10, 64)

View File

@@ -106,8 +106,10 @@ func New() *WebAPI {
api.router.GET("/logout", LogRequestMiddleware(api.Logout))
api.router.GET("/account", LogRequestMiddleware(api.GetAccountDetails))
api.router.GET("/manager/list", LogRequestMiddleware(api.GetManagerList))
api.router.GET("/manager/list_for_project/:id", LogRequestMiddleware(api.GetManagerListWithRoleOn))
api.router.GET("/manager/promote/:id", LogRequestMiddleware(api.PromoteManager))
api.router.GET("/manager/demote/:id", LogRequestMiddleware(api.DemoteManager))
api.router.POST("/manager/set_role_for_project/:id", LogRequestMiddleware(api.SetManagerRoleOnProject))
api.router.NotFound = func(ctx *fasthttp.RequestCtx) {

View File

@@ -81,6 +81,10 @@ type GetManagerListResponse struct {
Managers *[]storage.Manager `json:"managers"`
}
type GetManagerListWithRoleOnResponse struct {
Managers *[]storage.ManagerRoleOn `json:"managers"`
}
type GetLogRequest struct {
Level storage.LogLevel `json:"level"`
Since int64 `json:"since"`
@@ -263,6 +267,11 @@ func (w *CreateWorkerAccessRequest) isValid() bool {
return true
}
type SetManagerRoleOnProjectRequest struct {
Manager int64 `json:"manager"`
Role storage.ManagerRole `json:"role"`
}
type Info struct {
Name string `json:"name"`
Version string `json:"version"`

View File

@@ -100,7 +100,7 @@ func (api *WebAPI) CreateProject(r *Request) {
return
}
api.Database.SetManagerRoleOn(manager.(*storage.Manager), id,
api.Database.SetManagerRoleOn(manager.(*storage.Manager).Id, id,
storage.ROLE_MANAGE_ACCESS|storage.ROLE_READ|storage.ROLE_EDIT)
r.OkJson(JsonResponse{
Ok: true,
@@ -403,3 +403,35 @@ func (api *WebAPI) RejectAccessRequest(r *Request) {
})
}
}
func (api *WebAPI) SetManagerRoleOnProject(r *Request) {
pid, err := strconv.ParseInt(r.Ctx.UserValue("id").(string), 10, 64)
handleErr(err, r) //todo handle invalid id
req := &SetManagerRoleOnProjectRequest{}
err = json.Unmarshal(r.Ctx.Request.Body(), req)
if err != nil {
r.Json(JsonResponse{
Ok: false,
Message: "Could not parse request",
}, 400)
return
}
sess := api.Session.StartFasthttp(r.Ctx)
manager := sess.Get("manager")
if !isActionOnProjectAuthorized(pid, manager, storage.ROLE_MANAGE_ACCESS, api.Database) {
r.Json(JsonResponse{
Message: "Unauthorized",
Ok: false,
}, 403)
return
}
api.Database.SetManagerRoleOn(req.Manager, pid, req.Role)
r.OkJson(JsonResponse{
Ok: true,
})
}