0

我有 5 个用户角色(“admin”、“modifier”、“manager”、“projectmanager”、“readonly”),需要根据特定角色执行不同的代码(每个用户只有一个角色)。在我在数据库中设置用户和角色之前,我想让它工作并测试 JavaScript 中的功能。如何将用户(硬编码值)“连接”到正确的角色并执行代码?

我应该使用数组还是开关盒?

就像是:

//Declaration
arrAdmin["user1","user5","user9"];
arrModifier["user3","user6","user8"];
arrManager[];
arrProject["user4"];
arrReadOnly["user2","user7","user10","user11"]
...

function executeFunctionality(user){
var userFound = false;
while(userFound == false){
    for(var i=0; i<arrAdmin.length; i++){
        if(user == arrAdmin[i]){
            userFound = true;
            executeAdmin();
        }
    }
    for(var i=0; i<arrModifier.length; i++){
        if(user == arrModifier[i]){
            userFound = true;
            executeModifier();
        }
    }
    for(var i=0; i<arrManager.length; i++){
        if(user == arrManager[i]){
            userFound = true;
            executeManager();
        }
    }
    //etc...
}
}

或者开关盒?

switch(user){
"user1" : executeAdmin();
"user2" : executeReadOnly();
"user3" : executeModifier();
"user4" : executeProject();
"user5" : executeAdmin();
// etc ...
}

提前致谢!

4

3 回答 3

2

您绝对应该将该逻辑放在服务器端并根据当前用户的角色交付内容和脚本,因为任何人都可以访问您的 JS。在客户端处理它是不安全的!

于 2013-06-18T09:16:42.320 回答
1

对这个答案稍作修改,您应该能够执行以下操作:

var dispatcher = {
    "user1": executeAdmin,
    "user3": executeModifier,
    "user4": executeProject,
    "user5": executeAdmin
//...
};

(dispatcher[user] || executeReadOnly)();

注意:如果“只读”用户角色意味着所有用户的基本权限(在您的示例中似乎就是这种情况),则无需将任何用户映射到它。只需实现适用于所有用户(没有任何额外功能)的默认方案。

于 2013-06-18T09:20:58.350 回答
0

这应该做

function executeFunctionality(user){
    if(executeUserFunction(arrAdmin, user, executeAdmin)){
        return true;
    }

    if(executeUserFunction(arrModifier, user, executeAdmin)){
        return true;
    }

    if(executeUserFunction(arrManager, user, executeAdmin)){
        return true;
    }
    //etc
    return false;
}

function executeUserFunction(array, user, fn){
    var i;

    for(i = 0; i < array.length; i++){
        if(user == array[i]){
            fn();
            return true;
        }
    }
    return false;
}
于 2013-06-18T09:19:16.410 回答