iT邦幫忙

2022 iThome 鐵人賽

DAY 23
1

Day 23 Permission Tree?

昨天不負責的說了一下我們需要來研究一下如何做權限管理,今天就來研究一下。

const perms = {
    command: {
        help: new Date("2099-12-31"),
        ping: new Date(0),
        perm: {
            set: new Date(0),
            remove: new Date(0),
            list: new Date(0),
            self: new Date("2099-12-31"),
        }
    }
};

上面這個就是我們的「基礎權限樹」,我們可以用這個來判斷使用者是否有權限使用某個指令,葉節點的值就是權限的到期時間,如果到期時間是 0 的話代表無權限(一定已過期),如果到期時間是 2099-12-31 的話就相當永久權限(在 Discord 消失之前都不會過期)。

假設我們有兩位使用者,一位是 @admin,另一位是 @user,他們的權限樹如下:

const admin_perms = copy(perms);
const user_perms = copy(perms);

admin_perms.command.ping = new Date("2099-12-31");
admin_perms.command.perm = new Date("2099-12-31");

這邊我們直接把 @admin 的 ping 指令權限和 perm 指令權限都設定成永久權限,perm 指令的部分應為設定在母節點上,所有子節點都會直接繼承母節點的權限。而 @user 的權限樹就是我們的基礎權限樹。

權限的部分應該也會對 context 做擴充,我們可以在 context 中加入一個 perm 的欄位,這樣在指令中就可以直接使用 ctx.perm 來取得是否有權限。

ctx.perm("command.help") // true / false

接下來,比較麻煩的我們需要在 TypeScript 中也可以做到權限樹的節點類型安全:

https://i.imgur.com/5fke51W.png


每日鐵人賽熱門 Top 10 (2022-10-08)

以 2022/10/07 21:00 ~ 2022/10/08 21:00 文章觀看數增加值排名

誤差: 1 小時

  1. +1597 [Day 1] 工具從來不是問題,知識才是力量 ! Scrum 該懂的二三事 !
    • 作者: Darwin Watterson
    • 系列:工具從來不是問題,知識才是力量 ! Microsoft 365 照樣玩 Scrum !
  2. +522 Day-1 阿里雲服務概論
    • 作者: MFT
    • 系列:亞洲雲端黑馬-阿里雲的七大必學應用
  3. +521 挑戰 blind75: 以圖解方式練習解題- 前導文
    • 作者: json_liang
    • 系列:挑戰 blind 75: 以圖解方式練習解題
  4. +443 【DAY24】Proxy模式 - 找個代理人來幫忙你吧!
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式
  5. +436 【DAY23】Flyweight模式 - 共享的意義
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式
  6. +423 【DAY25】Memento模式 - 無限生命值的秘訣!
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式
  7. +421 【DAY26】Mediator模式 - 瞭解通訊軟體如何去發送訊息
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式
  8. +421 圖解 blind 75: Array & HashTable - two sum (1/3)
    • 作者: json_liang
    • 系列:挑戰 blind 75: 以圖解方式練習解題
  9. +415 【DAY4】UML (統一建模語言)
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式
  10. +411 【DAY18】Observer模式 - 訂閱你喜好的Youtuber!
    • 作者: 菜腦工程師
    • 系列:勇闖秘境!探索物件導向背後的設計模式

上一篇
Day 22 Member Permission
下一篇
Day 24 TypeScript String Literal
系列文
Discord Bot with TypeScript: Framework, Database, and Modules30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言