gpt4 book ai didi

javascript - 使用权限而不重复代码

转载 作者:行者123 更新时间:2023-12-03 03:09:19 24 4
gpt4 key购买 nike

我有一个功能,要求用户是所有者或管理员。某些命令仅适用于所有者,而不适用于管理员,但所有者也可以运行管理员命令。

我发现我只是为两个部分重复相同的代码。有没有办法巩固这一点,这样我就不会违反重复自己的规则?

这是我的总体方案:

request(checkPermissionRequest, function (error, response, body) {
// Determine who is allowed to run the script
switch (body[0].permission) {
// Owner
case 0:
if (isOwner(user)) {
// Script code
}
break;
// Admin
case 1:
if (isOwner(user) || isAdmin(user)) {
// Script code
}
break;
}
});

更新

我可以看到我的上述解释如何引起了一些困惑,所以我会尝试尝试澄清它。有多个可用的脚本,一些用于所有者,一些用于管理员(也可以由所有者运行)。这些权限保存在数据库中,我通过发出请求来获取它。这就是为什么我不能只为所有者设置内容以及为管理员和所有者设置内容,因为在从数据库获取结果之前我不知道脚本的权限是什么。这些权限是由所有者设置的,我无法跟踪它们。我修改了代码以尝试显示得更清晰。

最佳答案

根据您设计脚本的方式,您的权限级别由整数表示。让我们利用这一点来发挥我们的优势。

让我们定义一个像这样的辅助函数:

function getUserPermissions(user) {
if(isOwner(user) return 0;
if(isAdmin(user) return 1;
return 2; // or some arbitrarily high value- heck, even Number.MAX_SAFE_INTEGER
}

然后,您可以简单地执行以下操作,而不需要 switch 和一堆 if 语句:

request(checkPermissionRequest, function (error, response, body) {
// Determine who is allowed to run the script
if(getUserPermissions(user) < parseInt(body[0].permission) {
// do the script
}
});

如果遵循这种模式,如果可以的话,您还可以考虑切换 0 和 1,以便更高的数值表示更高级别的权限 - 如果只是为了可读性,因为它允许-1 值表示没有权限的人。在这种情况下,您需要更改 if 条件来检查 getUserPermissions(user) > parseInt(body[0].permission而不是<

另一方面,如果您继续使用可读性稍差的 <选项,允许添加其他级别的权限,其访问权限低于管理员,如 3等等,而无需增加现有的所有者和管理员级别。

关于javascript - 使用权限而不重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com