在设计用户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;
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器