AAIT#36979 FO rechten voor RES-API beter ondersteunen
svn path=/Website/trunk/; revision=32223
This commit is contained in:
@@ -134,10 +134,14 @@ api2_rest = {
|
|||||||
var wasCodePage = Session.Codepage;
|
var wasCodePage = Session.Codepage;
|
||||||
Session.Codepage = 65001; // We doen *uitsluitend* utf-8
|
Session.Codepage = 65001; // We doen *uitsluitend* utf-8
|
||||||
Response.Charset = 'utf-8';
|
Response.Charset = 'utf-8';
|
||||||
|
var format = getQParamSafe("format", "invalid").toLowerCase();
|
||||||
|
if (format == "json")
|
||||||
|
/* global */ JSON_Result = true; // Zelf doen we er niets mee maar
|
||||||
|
// shared.simple_page kijkt er naar
|
||||||
|
|
||||||
api2_rest.authenticate();
|
api2_rest.authenticate();
|
||||||
// Kip-ei: de omzetting naar new model() mag pas als je geauthenticeerd bent
|
// Kip-ei: de omzetting naar new model() mag pas als je geauthenticeerd bent
|
||||||
// Hieroboven willen we heb echter al wel meegeven
|
// Hierboven willen we het echter al wel meegeven
|
||||||
if (typeof model == "function") // Nieuwe stijl is het een function. Even compatible.
|
if (typeof model == "function") // Nieuwe stijl is het een function. Even compatible.
|
||||||
model = new model();
|
model = new model();
|
||||||
|
|
||||||
@@ -163,7 +167,7 @@ api2_rest = {
|
|||||||
|
|
||||||
if (/PUT|POST/.test(method)) // Dan is er in de body data meegestuurd
|
if (/PUT|POST/.test(method)) // Dan is er in de body data meegestuurd
|
||||||
{
|
{
|
||||||
switch (getQParamSafe("format", "invalid").toLowerCase())
|
switch (format)
|
||||||
{
|
{
|
||||||
case "json":
|
case "json":
|
||||||
{
|
{
|
||||||
@@ -197,11 +201,11 @@ api2_rest = {
|
|||||||
var key = getQParamInt("id", -1); // Voor POST/PUT/DELETE
|
var key = getQParamInt("id", -1); // Voor POST/PUT/DELETE
|
||||||
var isSingle = /PUT|POST|DELETE/.test(method) || (key > 0); // PUT, POST en DELETE altijd single
|
var isSingle = /PUT|POST|DELETE/.test(method) || (key > 0); // PUT, POST en DELETE altijd single
|
||||||
|
|
||||||
if (getQParamSafe("format", "json") == "doc")
|
if (format == "doc")
|
||||||
{
|
{
|
||||||
// Dan hoeven we verder niets te doen
|
// Dan hoeven we verder niets te doen
|
||||||
}
|
}
|
||||||
else if (getQParamSafe("format", "json") == "api")
|
else if (format == "api")
|
||||||
{
|
{
|
||||||
// TODO: Onderstaande in een of ander standaardformaat opleveren?
|
// TODO: Onderstaande in een of ander standaardformaat opleveren?
|
||||||
var result = { id: model.records_name,
|
var result = { id: model.records_name,
|
||||||
@@ -314,7 +318,7 @@ api2_rest = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
api2_rest.deliver(data, model, getQParamSafe("format", "json"), isSingle);
|
api2_rest.deliver(data, model, format, isSingle);
|
||||||
|
|
||||||
},
|
},
|
||||||
// Data is een array met 'records'
|
// Data is een array met 'records'
|
||||||
|
|||||||
@@ -103,23 +103,29 @@ function model_reservations(rsv_key, params)
|
|||||||
|
|
||||||
this.REST_GET = function _GET(params)
|
this.REST_GET = function _GET(params)
|
||||||
{
|
{
|
||||||
var scope = params.filter.scope || "fe";
|
|
||||||
var autfunction = { fe : "WEB_RESUSE", fo : "WEB_RESFOF", bo : "WEB_RESBOF", mi : "WEB_RESBAC" } [scope];
|
|
||||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
|
||||||
|
|
||||||
// TODO: Add authorization
|
|
||||||
var query = api2.sqlfields(params, this );
|
var query = api2.sqlfields(params, this );
|
||||||
|
|
||||||
if (scope == "fe")
|
if (params.filter.id > 0)
|
||||||
{
|
{
|
||||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
var this_res = res.func_enabled(params.filter.id);
|
||||||
if (!params.filter.id)
|
user.auth_required_or_abort(this_res.canReadAny);
|
||||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
|
||||||
}
|
}
|
||||||
else
|
else // lijst
|
||||||
{
|
{
|
||||||
if (!params.filter.start_from && !params.filter.end_from && !params.filter.start_to && !params.filter.end_to)
|
var scope = params.filter.scope || "fe";
|
||||||
query.wheres.push("res_rsv_ruimte_van >= TRUNC(SYSDATE)"); // reserveringen van vandaag en komende dagen!
|
var autfunction = { fe : "WEB_RESUSE", fo : "WEB_RESFOF", bo : "WEB_RESBOF", mi : "WEB_RESBAC" } [scope];
|
||||||
|
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||||
|
|
||||||
|
if (scope == "fe")
|
||||||
|
{
|
||||||
|
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)");
|
||||||
|
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!params.filter.start_from && !params.filter.end_from && !params.filter.start_to && !params.filter.end_to)
|
||||||
|
query.wheres.push("res_rsv_ruimte_van >= TRUNC(SYSDATE)"); // reserveringen van vandaag en komende dagen!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
query.tables.push("res_ruimte_opstelling");
|
query.tables.push("res_ruimte_opstelling");
|
||||||
@@ -147,21 +153,24 @@ function model_reservations(rsv_key, params)
|
|||||||
+ " FROM " + query.tables.join(", ")
|
+ " FROM " + query.tables.join(", ")
|
||||||
+ " WHERE " + query.wheres.join(" AND " );
|
+ " WHERE " + query.wheres.join(" AND " );
|
||||||
|
|
||||||
// Over het resultaat moet nog de 3D rasp, altijd
|
if (!(params.filter.id > 0))
|
||||||
sql = discx3d (sql,
|
{
|
||||||
"rr.res_discipline_key",
|
// Over het resultaat moet nog de 3D rasp, altijd
|
||||||
"di.alg_regio_key",
|
sql = discx3d (sql,
|
||||||
"rg.alg_district_key",
|
"rr.res_discipline_key",
|
||||||
"rg.alg_locatie_key",
|
"di.alg_regio_key",
|
||||||
"rg.alg_gebouw_key",
|
"rg.alg_district_key",
|
||||||
"rg.alg_verdieping_key",
|
"rg.alg_locatie_key",
|
||||||
"rg.alg_ruimte_key",
|
"rg.alg_gebouw_key",
|
||||||
"boom.prs_bedrijf_key",
|
"rg.alg_verdieping_key",
|
||||||
"boom.prs_afdeling_key",
|
"rg.alg_ruimte_key",
|
||||||
autfunction,
|
"boom.prs_bedrijf_key",
|
||||||
"",
|
"boom.prs_afdeling_key",
|
||||||
2,null,3
|
autfunction,
|
||||||
);
|
"",
|
||||||
|
2,null,3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
sql += " ORDER BY res_rsv_ruimte.res_rsv_ruimte_key"; // Order by nodig voor includes
|
sql += " ORDER BY res_rsv_ruimte.res_rsv_ruimte_key"; // Order by nodig voor includes
|
||||||
if (query.orderbys.length)
|
if (query.orderbys.length)
|
||||||
@@ -243,12 +252,14 @@ function model_reservations(rsv_key, params)
|
|||||||
this.REST_PUT = function (params, jsondata, the_key) /* update reservation */
|
this.REST_PUT = function (params, jsondata, the_key) /* update reservation */
|
||||||
{
|
{
|
||||||
var rsv_ruimte_key = the_key;
|
var rsv_ruimte_key = the_key;
|
||||||
|
var this_res = res.func_enabled(rsv_ruimte_key);
|
||||||
|
user.auth_required_or_abort(this_res.canChange);
|
||||||
|
|
||||||
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
||||||
_analyze_fields(dbfields, params, jsondata);
|
_analyze_fields(dbfields, params, jsondata);
|
||||||
_validate_fields(dbfields, params, jsondata);
|
_validate_fields(dbfields, params, jsondata);
|
||||||
// bezUpd heeft na afloop eventueel oldjsvals
|
|
||||||
var wheres = [" res_rsv_ruimte_key = " + rsv_ruimte_key];
|
var wheres = [" res_rsv_ruimte_key = " + rsv_ruimte_key];
|
||||||
wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
|
||||||
|
|
||||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||||
@@ -305,7 +316,7 @@ function model_reservations(rsv_key, params)
|
|||||||
_validate_fields(dbfields, params, jsondata);
|
_validate_fields(dbfields, params, jsondata);
|
||||||
|
|
||||||
// Eerst een nieuw res_reservering record aanmaken
|
// Eerst een nieuw res_reservering record aanmaken
|
||||||
var resfields = { "id": { dbs: "res_reservering_key", typ: "key", seq: "res_s_res_reservering_key" },
|
var resfields = { "id": { dbs: "res_reservering_key", typ: "key", seq: "res_s_res_reservering_key" },
|
||||||
"create": { dbs: "res_reservering_aanmaak", typ: "datetime", val: new Date() }
|
"create": { dbs: "res_reservering_aanmaak", typ: "datetime", val: new Date() }
|
||||||
};
|
};
|
||||||
var resIns = buildInsert("res_reservering", resfields, { noValidateToken: true });
|
var resIns = buildInsert("res_reservering", resfields, { noValidateToken: true });
|
||||||
@@ -313,12 +324,22 @@ function model_reservations(rsv_key, params)
|
|||||||
var volgnr = 1;
|
var volgnr = 1;
|
||||||
Oracle.Execute(resIns.sql);
|
Oracle.Execute(resIns.sql);
|
||||||
|
|
||||||
|
var host_key = user_key;
|
||||||
|
var contact_key = user_key;
|
||||||
|
if (user.has("WEB_RESFOF"))
|
||||||
|
{
|
||||||
|
if ("host" in jsondata)
|
||||||
|
host_key = jsondata.host;
|
||||||
|
if ("contact" in jsondata)
|
||||||
|
contact_key = jsondata.contact;
|
||||||
|
}
|
||||||
|
|
||||||
// Nu aan de slag met een res_rsv_ruimte record
|
// Nu aan de slag met een res_rsv_ruimte record
|
||||||
dbfields["id"] = { dbs: "res_rsv_ruimte_key", typ: "key", seq: "res_s_res_rsv_ruimte_key" };
|
dbfields["id"] = { dbs: "res_rsv_ruimte_key", typ: "key", seq: "res_s_res_rsv_ruimte_key" };
|
||||||
dbfields["reskey"] = { dbs: "res_reservering_key", typ: "key", val: reservering_key };
|
dbfields["reskey"] = { dbs: "res_reservering_key", typ: "key", val: reservering_key };
|
||||||
dbfields["sequence"] = { dbs: "res_rsv_ruimte_volgnr", typ: "number", val: volgnr };
|
dbfields["sequence"] = { dbs: "res_rsv_ruimte_volgnr", typ: "number", val: volgnr };
|
||||||
dbfields["host"] = { dbs: "res_rsv_ruimte_host_key", typ: "key", val: user_key };
|
dbfields["host"] = { dbs: "res_rsv_ruimte_host_key", typ: "key", val: host_key };
|
||||||
dbfields["contact"] = { dbs: "res_rsv_ruimte_contact_key", typ: "key", val: user_key };
|
dbfields["contact"] = { dbs: "res_rsv_ruimte_contact_key", typ: "key", val: contact_key };
|
||||||
if (!jsondata.status)
|
if (!jsondata.status)
|
||||||
dbfields["status"] = { dbs: "res_status_fo_key", typ: "key", val: S("res_default_fe_status_key") };
|
dbfields["status"] = { dbs: "res_status_fo_key", typ: "key", val: S("res_default_fe_status_key") };
|
||||||
var resIns = buildInsert("res_rsv_ruimte", dbfields, { noValidateToken: true });
|
var resIns = buildInsert("res_rsv_ruimte", dbfields, { noValidateToken: true });
|
||||||
|
|||||||
Reference in New Issue
Block a user