From 355b1cebd51e94b9e33b021f034705eb97196fe0 Mon Sep 17 00:00:00 2001 From: philc Date: Thu, 28 Mar 2024 23:17:49 +0100 Subject: [PATCH] modif odmdb accessright --- models/Odmdb.js | 14 ++++++++++---- routes/odmdb.js | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/models/Odmdb.js b/models/Odmdb.js index 3e1ad8f..530a53f 100644 --- a/models/Odmdb.js +++ b/models/Odmdb.js @@ -221,7 +221,7 @@ Odmdb.Schema = (objectPathname, validschema, lg="en") => { status: 404, ref: "Odmdb", msg: "schemanotfound", - data: { objectPathname, schema: {} }, + data: { objectPathname:path.resolve(objectPathname), schema: {} }, }; } @@ -471,6 +471,7 @@ Odmdb.accessright = (apxaccessrights, role) => { Odmdb.cud = (objectPathname, crud, itm, role, runindex = true) => { const getschema = Odmdb.Schema(objectPathname, true); + if (getschema.status != 200) return getschema; if (!itm[getschema.data.schema.apxid]) { @@ -486,7 +487,7 @@ Odmdb.cud = (objectPathname, crud, itm, role, runindex = true) => { const existid = fs.existsSync( `${objectPathname}/itm/${itm[getschema.data.schema.apxid]}.json` ); - + if (log) console.log(currentmod,"Pass schema itm existid = ", existid) /*const pathindex = `${objectPathname}/idx/lst_${getschema.data.schema.apxid}.json`; if (!fs.existsSync(pathindex)) { fs.outputJSONSync(pathindex, []); @@ -538,12 +539,13 @@ Odmdb.cud = (objectPathname, crud, itm, role, runindex = true) => { getschema.data.schema.apxaccessrights, role ); - if (log) console.log(currentmod,"accessright", accessright); + if ( (crud == "C" && !accessright.C) || (crud == "D" && !accessright.D) || (crud == "U" && !accessright.U) ) { + if (log) console.log(currentmod,"Forbidden accessright:", accessright); return { status: 403, ref: "Odmdb", @@ -578,7 +580,11 @@ Odmdb.cud = (objectPathname, crud, itm, role, runindex = true) => { itmtostore, false ); - if (chkdata.status != 200) return chkdata; + if (chkdata.status != 200) { + if (log) console.log(currentmod,"Unconsistency data", chkdata); + return chkdata; + } + if (log) console.log(currentmod,"Data compliance with schema"); if (!getschema.data.schema.apxuniquekey) getschema.data.schema.apxuniquekey = []; if (log) console.log(currentmod,`${objectPathname}/itm/${chkdata.data.apxid}.json`); diff --git a/routes/odmdb.js b/routes/odmdb.js index 0ec9225..8ffc2bb 100644 --- a/routes/odmdb.js +++ b/routes/odmdb.js @@ -228,8 +228,47 @@ router.get( router.post("/itm/:objectname", checkHeaders, isAuthenticated, (req, res) => { // Create an item of an object with no specificities // if specificities then create a route / model that import odmdb - res.json({}); + const objectPathname=`../../${req.session.header.xtribe}/objects/${req.params.objectname}`; + const postitm=Odmdb.cud(objectPathname,"C",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias}); + res.status(postitm.status).json(postitm); }); + + +/** + * @api {put} /adminapi/odmdb/itm/:objectname - item Update + * @apiGroup Odmdb + * @apiName putItm + * @apiPermission none + * @apiDescription Update an item (data) into a collection of objectname items. Before Check data integrity with the relevant schema. + * Then create a new primarykey. For multilanguage return see nationchains/model/lg/Odmdb_xx.json. + * + * @apiParam {string} objectname Place where to create new item, schema and version are available in /objectname/conf.json + * + * @apiBody {Object} data must pass Checkjson.js with schema + * + * @apiSuccess {json} data idxprimary Value of idxprimary into objectname collection + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * {"status":200, "ref":"Odmdb", "msg":"cudsuccessfull", "data":{"itm":{}}} + * + * @apiError {json} schemanotfound The objectname schema is not found + * @apiError {json} pathnamedoesnotexist The objectname does not exist for the tribe + * @apiError {json} missingprimarykey Body data must have primarykey to be created + * @apiError {json} unconsistencyapxidx some Body data get unique key that already exist + * @apiError {json} checkjsonfalse The body data are not consistent with the schema + * @apiErrorExample {json} + * HTTP/1.1 404 Not Found + * {"status":404,"ref":"Odmdb","msg":"see nationchains/model/lg/Odmdb_xx.json","data":"object to render with msg"} + * + */ +router.put("/itm/:objectname", checkHeaders, isAuthenticated, (req, res) => { + // Create an item of an object with no specificities + // if specificities then create a route / model that import odmdb + const objectPathname=`../../${req.session.header.xtribe}/objects/${req.params.objectname}`; + const postitm=Odmdb.cud(objectPathname,"U",req.body,{xprofils:req.session.header.xprofils,xalias:req.session.header.xalias}); + res.status(postitm.status).json(postitm); +}); + router.get( "/searchitems/:objectname/:question", checkHeaders,