时间: 2021-07-31 作者:daque
在安排用户user -> 脚色roles时,用","号将用户属于的多个脚色id划分,以确定用户分属的哪些脚色。在存户端的界面是两个select下拉框,左边的是职员user,右边的是脚色roles,在左边的select中采用一个user,右边应能表露相映的脚色,即使沿用将用户id寄递至效劳端查问并革新右边的用户脚色,本能和功效都比拟低。所以,即使将user -> roles生存在存户端,简直操纵是在初始化页面时,将用户权力表中已查问到的用户和脚色生存在映照表中(提防:映照表是在存户端中的,而查问是在效劳端),当须要查问某个用户(用户动作要害字key)具备哪些脚色(脚色动作value)时,就径直映照表中查问(lookup),因为一个用户生存多个脚色,以是映照表类也作了相映变换,往日的映照表类中的key要害字是不承诺有反复的,此刻承诺有反复的要害字,相映的查问的归来值会有多个,所以归来值为数组典型。
比方,user_a用户有role_a和role_b两种脚色,不妨作底下的操纵:
map.setat("user_a", "role_a");
map.setat("user_a", "role_b");
查问user_a的脚色时,用map.lookup("user_a")本领,这将归来一个数组东西,一切的脚色将生存在这个归来的数组中。
矫正后的代码如次:// 提防:底下被解释的代码,在上一个本子中生存
function struct(key, value){
this.key = key; this.value = value;
}
function setat(key, value){ /* for (var i = 0; i < this.map.length; i++) { if ( this.map[i].key === key ) { this.map[i].value = value; return; } } */ this.map[this.map.length] = new struct(key, value);
}
function lookup(key){ var arr = new array(); var j = 0; for (var i = 0; i < this.map.length; i++) { if ( this.map[i].key === key ) { arr[j++] = this.map[i].value; //return this.map[i].value; } } return arr;}
function removekey(key){ var v; for (var i = 0; i < this.map.length; i++) { v = this.map.pop(); if ( v.key === key ) continue; this.map.unshift(v); }}
function getcount(){ return this.map.length;}
function isempty(){ return this.map.length <= 0;}
function classmap() {
this.map = new array();
this.lookup = lookup; this.setat = setat; this.removekey = removekey; this.getcount = getcount; this.isempty = isempty;}