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, 作为校验密码.
我们这么修改,
代码的最开头, 增加一个数组
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
测试
https://newkvdb.crazypeace.workers.dev/kvdbkvdb
LoadKV 不能查询出 _user_pwd_ 和 _admin_pwd_
评论
发表评论