// PUT /cms/admin/users/:id/roles — grant/revoke roles (admin only). // body: { "add": ["author"], "remove": ["reader"] } import "auth" as auth; let g = auth::guard(ctx, ["admin"]); if !g.ok { return g.response; } let id = ctx.request.params.id; let target = users::get(id); if target == () { return #{ statusCode: 404, body: #{ error: "no such user" } }; } let valid = ["admin", "author", "reader"]; let b = ctx.request.body; if b != () { if b.add != () { for r in b.add { if valid.contains(r) { users::add_role(id, r); } } } if b.remove != () { for r in b.remove { if valid.contains(r) { users::remove_role(id, r); } } } } #{ statusCode: 200, body: #{ id: id, roles: auth::roles_of(target) } }