FSN#37973 Herkansing contract PRS-scope authorisatie

svn path=/Website/branches/v2016.2/; revision=31073
This commit is contained in:
Jos Groot Lipman
2016-10-12 16:11:07 +00:00
parent bd9441fe15
commit 3620b2073d
2 changed files with 26 additions and 46 deletions

View File

@@ -972,30 +972,15 @@ cnt = { setcontractstatus:
}
oRs_loc.Close();
// // Alleen personen met rechten op de afdelingen van de contracten mogen deze inzien.
// // Daarvoor hebben we de afdeling van het contract nodig.
// var sql_afd = "SELECT k.prs_afdeling_key"
// + " FROM cnt_contract c"
// + " , prs_afdeling k"
// + " WHERE c.prs_kostenplaats_key = k.prs_kostenplaats_key"
// + " AND c.cnt_contract_key = " + pcnt_contract_key;
// var oRs_afd = Oracle.Execute(sql_afd);
// var afd_arr = [];
// while (!oRs_afd.eof)
// {
// var ors_afd_key = oRs_afd("prs_afdeling_key").Value;
// if (ors_afd_key)
// afd_arr.push(ors_afd_key);
// oRs_afd.MoveNext();
// }
// oRs_afd.Close();
//
var afd_key = cnt_info.prs_afdeling_key_eig; // te controleren
if (user == cnt_info.perslid_key_eig || user == cnt_info.perslid_key_beh)
afd_key = null; // dan niet moeilijk doen over de afdeling
// Als een contract geen locaties heeft dan heb je alle rechten op dat contract.
var cresult = user.func_enabled2("CNT",
{ ins_discipline_key: cnt_info.discipline_key,
loc_key: loc_arr,
prs_key: user_key, // key_eig, // TODO: Vind de juiste perslid. Je hebt prs_afdeling_key_eig
afd_key: cnt_info.prs_afdeling_key_eig,
afd_key: afd_key,
checkOptimistic: false, // checkOptimistic
isOptional: true
});

View File

@@ -1086,13 +1086,6 @@ Perslid.prototype.func_enabled2 = function _func_enabled2(module, params)
// params.alg_key is geen array.
loc_key_array.push(params.loc_key);
}
var afd_key_array = [];
if (typeof params.afd_key == "object" && params.afd_key instanceof Array)
// params.afd_key is een array.
afd_key_array = params.afd_key;
else if (params.afd_key > 0)
// params.afd_key is een enkele key.
afd_key_array.push(params.afd_key);
// twee vars die aangeven hoe dichtbij parameters alg_key en prs_key bij 'onszelf' zitten.
// alglevel=5 geeft bijvoorbeeld aan dat wij een werkplek hebben op alg_key
@@ -1176,28 +1169,30 @@ Perslid.prototype.func_enabled2 = function _func_enabled2(module, params)
|| oRs.PRSwritelevel > -1 && oRs.PRSwritelevel < 9)
{ // Alleen als echt nodig is bepalen
// TODO: Bedrijf niveau ondersteunen?
if (PRSLevel == -2 && params.prs_key)
if (PRSLevel == -2) // Nog geen uitsluitsel
{
if (params.prs_key == user_key && afd_key_array.length == 0)
if (params.prs_key == user_key) // snel klaar, altijd goed
PRSLevel = 8;
else
else // Misschien via afdeling
{
// optimalisatie: haal de andere afd_key met een losse query op.
var afd_key = new Perslid(params.prs_key).prs_afdeling_key();
var sql = "SELECT MAX (a.niveau) niveau"
+ " FROM prs_v_afdeling_familie a, prs_v_afdeling_familie aa"
+ " WHERE a.prs_afdeling_key = " + afd_key // -- de ander
+ " AND a.prs_afdeling_elder_key = aa.prs_afdeling_elder_key"
+ " AND aa.prs_afdeling_key = " + this.prs_afdeling_key() // zelf
+ (afd_key_array.length > 0
? " AND aa.prs_afdeling_key IN (" + afd_key_array.join(",") + ")"
: "");
var oRs2 = Oracle.Execute(sql);
PRSLevel = (oRs2("niveau").Value == null
? (afd_key_array.length > 0 ? -1 : -2)
: oRs2("niveau").Value);
oRs2.Close();
__Log("PRSLevel vastgesteld op: " + PRSLevel);
if (params.prs_key)
{ // optimalisatie: haal de andere afd_key met een losse query op.
var afd_key = new Perslid(params.prs_key).prs_afdeling_key();
}
else
var afd_key = params.afd_key; // Misschien al meegegeven
if (params.afd_key > 0)
{
var sql = "SELECT MAX (a.niveau) niveau"
+ " FROM prs_v_afdeling_familie a, prs_v_afdeling_familie aa"
+ " WHERE a.prs_afdeling_key = " + afd_key // -- de ander
+ " AND a.prs_afdeling_elder_key = aa.prs_afdeling_elder_key"
+ " AND aa.prs_afdeling_key = " + this.prs_afdeling_key(); // zelf
var oRs2 = Oracle.Execute(sql);
PRSLevel = oRs2("niveau").value || -2;
oRs2.Close();
__Log("PRSLevel vastgesteld op: " + PRSLevel);
}
}
}
}