FSN#35817 Autorisaties via API2/Scaffolding: Code versimpeling, betere kolommen, setting S("auth_edit_advanced")

svn path=/Website/trunk/; revision=28714
This commit is contained in:
Jos Groot Lipman
2016-03-31 13:07:24 +00:00
parent b930d2e054
commit 527889eecd
7 changed files with 111 additions and 43 deletions

View File

@@ -635,10 +635,10 @@ api2 = {
var outer = "(+)";
if ("outertoggle" in inc)
{
if (params.filter.has_scf_outer && params.filter.scf_outer != "on")
if (params.filter.has_scf_outer && params.filter.scf_outer == "on")
outer = "";
else
outer = inc.outertoggle.def?"(+)":"";
outer = inc.outertoggle.def?"":"(+)";
}
wheres.push ( model.table + "." + model.primary + "=" + inc.model.table + "." + inc.model.fields[inc.joinfield].dbs + outer);
}
@@ -793,11 +793,11 @@ api2 = {
sql2jsonval: function _sql2jsonval(oRs, fld, model)
{
var field = model.fields[fld];
var sqlfieldname = (model.aliasprefix ? api2.sqlfield_alias(model, fld) : field.dbs);
if (field.val instanceof Function)
var val = field.val(oRs, field, model);
var val = field.val(oRs, field, model, sqlfieldname);
else if (field.dbs.indexOf(".") < 0)
{
var sqlfieldname = (model.aliasprefix ? api2.sqlfield_alias(model, fld) : field.dbs);
var val = oRs(sqlfieldname).Value;
}
else

View File

@@ -44,6 +44,7 @@ function model_fac_functie (functie_key, params)
"readonly": true,
"typ": "varchar",
"filterdefault": this.module?":!"+this.module:null,
"showfixedfilter": true,
"foreign": {
"tbl": "fac_module",
"key": "fac_module_name",
@@ -100,7 +101,7 @@ function model_fac_functie (functie_key, params)
this.includes = {"authorization":
{ "model": new model_fac_groeprechten(params),
"joinfield": "fac_functie",
"outertoggle": { def: true, lbl: L("fac_gebruiker_outerfunctie") }
"outertoggle": { def: false, lbl: L("fac_gebruiker_outerfunctie") }
}};
}

View File

@@ -60,7 +60,7 @@ function model_fac_groep(groep_key, params)
= {
"model": new model_fac_groeprechten(params),
"joinfield": "fac_groep",
outertoggle: { def: true, lbl: L("fac_gebruiker_outergroep") }
outertoggle: { def: false, lbl: L("fac_gebruiker_outergroep") }
};
}

View File

@@ -70,9 +70,9 @@ function model_fac_groeprechten (params)
"typ": "key",
"hidden_fld": true,
"foreign": {
"tbl": "FAC_FUNCTIE",
"key": "FAC_FUNCTIE_KEY",
"desc": "FAC_FUNCTIE_OMSCHRIJVING"
"tbl": "fac_functie",
"key": "fac_functie_key",
"desc": "fac_functie_omschrijving"
}
},
"ins_discipline": {
@@ -91,43 +91,85 @@ function model_fac_groeprechten (params)
"dbs": "fac_gebruiker_prs_level_read",
"label": L("fac_gebruiker_prs_level_read"),
"typ": "number",
"LOV": buildPrsLevelLOV()
"foreign": foreignPRSRechten
},
"prs_level_write": {
"dbs": "fac_gebruiker_prs_level_write",
"label": L("fac_gebruiker_prs_level_write"),
"typ": "number",
"LOV": buildPrsLevelLOV()
"foreign": foreignPRSRechten
},
"alg_level_read": {
"dbs": "fac_gebruiker_alg_level_read",
"label": L("fac_gebruiker_alg_level_read"),
"typ": "number",
"LOV": buildAlgLevelLOV()
"foreign": foreignALGRechten
},
"alg_level_write": {
"dbs": "fac_gebruiker_alg_level_write",
"label": L("fac_gebruiker_alg_level_write"),
"typ": "number",
"LOV": buildAlgLevelLOV()
"foreign": foreignALGRechten
}
};
function fnFunctieDisc(oRs, field, model)
function fnFunctieDisc(oRs, field, model, sqlfieldname)
{
if (!model.hasdisc)
return "N.v.t."; // N.v.t.
var nn_disc = oRs(api2.sqlfield_alias(model, "ins_discipline")).Value;
var nn_disc = oRs(sqlfieldname).Value;
return model.module + " " + nn_disc + "/"+ model.total_disc;
};
function fnGroep(oRs, field, model)
function fnGroep(oRs, field, model, sqlfieldname)
{
var nn_grp = oRs(api2.sqlfield_alias(model, "fac_groep")).Value;
var nn_grp = oRs(sqlfieldname).Value;
if (nn_grp > 0)
return nn_grp;
return "";
};
function foreignALGRechten(val)
{
switch (val)
{
case -3: return "";
case -2: return L("fac_gebruiker_level_variabel");
default: return api2.splitLOV(buildAlgLevelLOV())[val]
}
}
function foreignPRSRechten(val)
{
switch (val)
{
case -3: return "";
case -2: return L("fac_gebruiker_level_variabel");
default: return api2.splitLOV(buildPrsLevelLOV())[val]
}
}
// Levert -3 op als rechten niet van toepassing zijn op een veld
function fnRechten(oRs, field, model, sqlfieldname)
{
if ("min_level" in model)
var min_level = model.min_level
else
var min_level = oRs("fac_functie_min_level").Value;
if (!(min_level & 2) // Geen schrijfrechten
&& (field.dbs == "fac_gebruiker_prs_level_write" || field.dbs == "fac_gebruiker_alg_level_write")
)
return -3; // N.v.t.
if (!(min_level & 4) && (min_level & 8) // Geen PRS, wel ALG
&& (field.dbs == "fac_gebruiker_prs_level_read" || field.dbs == "fac_gebruiker_prs_level_write")
)
return -3;
if (!(min_level & 8) // Geen ALG rechten
&& (field.dbs == "fac_gebruiker_alg_level_read" || field.dbs == "fac_gebruiker_alg_level_write")
)
return -3;
return oRs(sqlfieldname).Value;
};
if (params.functie_key > 0 && params.groep_key > 0)
{
this.tablesql = "(SELECT *"
@@ -148,6 +190,7 @@ function model_fac_groeprechten (params)
{
var sql = "SELECT fac_functie_module"
+ " , fac_functie_discipline"
+ " , fac_functie_min_level"
+ " , (SELECT COUNT(*)"
+ " FROM ins_tab_discipline"
+ " WHERE ins_discipline_verwijder IS NULL"
@@ -157,36 +200,47 @@ function model_fac_groeprechten (params)
var oRs = Oracle.Execute(sql);
this.module = oRs("fac_functie_module").Value;
this.hasdisc = oRs("fac_functie_discipline").Value == 1;
this.min_level = oRs("fac_functie_min_level").Value;
this.total_disc = oRs("nn_disc").Value;
oRs.Close();
if (!(min_level & (4 | 8)))
{
this.fields["prs_level_read"].label = L("fac_gebruiker_lezen"); // Generiekere labels
this.fields["prs_level_write"].label = L("fac_gebruiker_schrijven");
}
this.tablesql = "(SELECT MIN(fac_groeprechten_key) fac_groeprechten_key,"
+ " fac_groep_key,"
+ " fac_functie_key,"
+ " COUNT(ins_discipline_key) nn_disc,"
+ " MIN(fac_gebruiker_prs_level_read) fac_gebruiker_prs_level_read,"
+ " MIN(fac_gebruiker_prs_level_write) fac_gebruiker_prs_level_write,"
+ " MIN(fac_gebruiker_alg_level_read) fac_gebruiker_alg_level_read,"
+ " MIN(fac_gebruiker_alg_level_write) fac_gebruiker_alg_level_write"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten"
+ " WHERE fac_functie_key = " + params.functie_key
+ " GROUP BY fac_groep_key, fac_functie_key) fac_groeprechten";
this.record_title += " TODO Functie: " + params.functie_key;
{
this.fields["ins_discipline"] =
{
"dbs": "nn_disc",
"label": L("ins_discipline_key"),
"typ": "varchar",
val: fnFunctieDisc,
"hidden_fld": true
};
}
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["ins_discipline"] =
{
"dbs": "nn_disc",
"label": L("ins_discipline_key"),
"typ": "varchar",
val: fnFunctieDisc,
"hidden_fld": true
};
}
else if (params.groep_key > 0)
{
this.tablesql = "(SELECT MIN(fac_groeprechten_key) fac_groeprechten_key,"
+ " fac_groep_key,"
+ " g.fac_functie_key,"
+ " f.fac_functie_min_level,"
+ " CASE"
+ " WHEN fac_functie_discipline = 1"
+ " THEN fac_functie_module || ' ' || "
@@ -196,15 +250,19 @@ function model_fac_groeprechten (params)
+ " WHERE ins_discipline_verwijder IS NULL"
+ " AND ia.ins_discipline_module = fac_functie_module)"
+ " END nn_disc,"
+ " MIN(fac_gebruiker_prs_level_read) fac_gebruiker_prs_level_read,"
+ " MIN(fac_gebruiker_prs_level_write) fac_gebruiker_prs_level_write,"
+ " MIN(fac_gebruiker_alg_level_read) fac_gebruiker_alg_level_read,"
+ " MIN(fac_gebruiker_alg_level_write) fac_gebruiker_alg_level_write"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten g, fac_functie f"
+ " WHERE fac_groep_key = " + params.groep_key
+ " AND g.fac_functie_key = f.fac_functie_key"
+ " GROUP BY fac_groep_key, g.fac_functie_key, fac_functie_discipline, fac_functie_module) fac_groeprechten";
+ " GROUP BY fac_groep_key, g.fac_functie_key, fac_functie_discipline, fac_functie_min_level, fac_functie_module) fac_groeprechten";
this.record_title += " TODO Groep: " + params.groep_key;
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["ins_discipline"] =
{
"dbs": "nn_disc",
@@ -219,14 +277,18 @@ function model_fac_groeprechten (params)
+ " COUNT(fac_groep_key) nn_groep,"
+ " fac_functie_key,"
+ " ins_discipline_key,"
+ " MIN(fac_gebruiker_prs_level_read) fac_gebruiker_prs_level_read,"
+ " MIN(fac_gebruiker_prs_level_write) fac_gebruiker_prs_level_write,"
+ " MIN(fac_gebruiker_alg_level_read) fac_gebruiker_alg_level_read,"
+ " MIN(fac_gebruiker_alg_level_write) fac_gebruiker_alg_level_write"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten"
+ " WHERE ins_discipline_key = " + params.disc_key
+ " GROUP BY ins_discipline_key, fac_functie_key) fac_groeprechten";
this.record_title += " TODO Disc: " + params.groep_key;
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["fac_groep"] =
{
"dbs": "nn_groep",

View File

@@ -118,7 +118,7 @@ function model_ins_tab_discipline(disc_key, params)
this.includes = {"authorization":
{ "model": new model_fac_groeprechten(params),
"joinfield": "ins_discipline",
"outertoggle": { def: true, lbl: L("fac_gebruiker_outerdisc") }
"outertoggle": { def: false, lbl: L("fac_gebruiker_outerdisc") }
}};
}

View File

@@ -212,7 +212,7 @@ function radioTD(name, LOV, val)
// +2 is afzonderlijke schrijfrechten
// +4 is PRS-scope
// +8 is ALG-scope
var advanced = getQParamInt("advanced", 0) == 1;
var advanced = getQParamInt("advanced", S("auth_edit_advanced")?1:0) == 1;
if ( prsread != algread
|| prswrite != algwrite
|| prsread != -1 && prsread != 9

View File

@@ -212,7 +212,12 @@ function scaffolding_search(model, scf_params)
if (field.filter == 'like' || field.filter == 'exact' || !("filter" in field))
{
if (!defs.fixed)
if (defs.fixed)
{
if (field.showfixedfilter)
scf_ROFIELDTR(xmodel, fld, defs.vmin, null);
}
else
scf_RWFIELDTR(xmodel, fld, defs.vmin, null, {search: true});
}
else if (field.filter == "range")