KV-woker 纯练手项目 2个密码 对应不同的权限

KV-woker 项目准备实现的功能列表见此:

今天实现:
  • 2个权限和对应的密码. 管理员权限 和 用户权限


第 1 步

用 _admin_pwd_ 和 _user_pwd_ 实现原来 password 的控制访问的功能

在 KV 中, 添加记录
Key:
_user_pwd_ 
Value:  (我随便定的示例)
kvdbkvdb

Key:
_admin_pwd_
Value:  (我随便定的示例)
kvdbadmin


原项目 Url-Shorten-Worker 中, 是在 KV 库中保存 password 来 控制访问权限的.
代码中, 在这里从KV库中获取  password 对应的 value, 作为校验密码.
后续的逻辑, 都是使用这个变量 password_value 与JSON中的password字段比较, 或者是与浏览器访问的path比较.


我们这么修改, 
代码的最开头, 增加一个数组
const user_key_list = [
  "_admin_pwd_",
  "_user_pwd_"
]
在代码原来从 KV库 查询 password 的地方, 改为
将每个 user_key_list 的成员, 从KV库查询, 并将结果保存到 user_password_value_list
const user_password_value_list = await Promise.all(
  user_key_list.map(async key => await KVDB.get(key) || null)
);
* JS的语法是比较奇怪, 我们拿人类语言去问 GPT 就好了.

在校验权限的地方, 原来是判断 password_value 是否等于 XXXX.  改为
判断 user_password_value_list 是否包含 XXXX

测试
https://newkvdb.crazypeace.workers.dev/kvdbkvdb
https://newkvdb.crazypeace.workers.dev/kvdbadmin
功能正常.


第 2 步

保护 _admin_pwd_ 和 _user_pwd_  就像保护以前的 password 一样

原项目的实现, 是 protect_keylist 数组里面写的是 password,
在后面的业务逻辑中, 使用判断数组中是否有元素的方式 List.includes(key) , 来判断是否是属于需要保护的key.
if (protect_keylist.includes(req_key))

那么我们只要修改 protect_keylist , 把里面改为 _admin_pwd_ 和 _user_pwd_ 就是了.

测试
https://newkvdb.crazypeace.workers.dev/_user_pwd_ 
https://newkvdb.crazypeace.workers.dev/_admin_pwd_
显示404

测试
https://newkvdb.crazypeace.workers.dev/kvdbkvdb
https://newkvdb.crazypeace.workers.dev/kvdbadmin
功能正常.



第 3 步

让 _admin_pwd_ 有修改 _admin_pwd_ 和 _user_pwd_ 的权限

现在是 _user_pwd_ 访问时, 和以前 password 访问时的表现一样.

我们现在要增加
当用 _admin_pwd_ 访问时, 能查看, 创建, 修改 protect_keylist 的KV.

使用者的身份, 是来自于 API 请求中的 password 字段.
也就是说, 当API 请求中的 password 字段为 kvdbadmin 时, 就不要判断 protect_keylist 数组了.

参考第1步, 代码的最开头, 增加一个数组
const admin_key_list = [
  "_admin_pwd_"
]

一样的, 在查询 user_password_value_list 的地方, 也查一下 admin_password_value_list

const admin_password_value_list = await Promise.all(
  admin_key_list.map(async key => await KVDB.get(key) || null)
);

然后在第2步, 把

if ( protect_keylist.includes(req_key))

改为

if ( (! admin_password_value_list.includes(req_password)) && protect_keylist.includes(req_key))


注意, 我们只修改 API 部分的处理. 在浏览器访问worker页面的处理还是和之前一样, 不允许访问 protect_keylist

测试
https://newkvdb.crazypeace.workers.dev/_user_pwd_ 
https://newkvdb.crazypeace.workers.dev/_admin_pwd_
显示404

测试
https://newkvdb.crazypeace.workers.dev/kvdbkvdb
https://newkvdb.crazypeace.workers.dev/kvdbadmin
功能正常.

测试
https://newkvdb.crazypeace.workers.dev/kvdbadmin
LoadKV 可以查询得到 _user_pwd_ 和 _admin_pwd_ 的 value

可以修改 _user_pwd_ 和 _admin_pwd_ 的value



测试
https://newkvdb.crazypeace.workers.dev/kvdbkvdb
LoadKV 不能查询出 _user_pwd_ 和 _admin_pwd_  



评论

The Hot3 in Last 30 Days

RackNerd VPS搭Hysteria2 HY2梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存

RackNerd VPS搭V2Ray WSS梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存