這一篇其實就是 byte 換算文章中提過的權限資料,這些權限是使用位元來區分目前使用者擁有那些權限,針對這部分,順便把一些資料整理一下,說明一下權限設計的考量方向,然後針對位元運算與權限的方式說明。
大部分權限的要求,都是管理介面的部分,或是管理者與一般使用者混用的狀況;而常見的權限有建立(新增)、檢視、變更、刪除四種可能,這是操作功能的權限。另外一種就是帳號的權限,該帳號可以操作的系統功能等…。這兩種權限是息息相關的;舉例來說,以下是一個網站系統架構:購物車、分析圖表及會員資料皆可能有新增、檢視、變更、刪除四種功能權限
graph TB A(fa:fa-sitemap 網站系統) A-->B1(fa:fa-cart-arrow-down 購物車) A-->B2(fa:fa-area-chart 分析圖表) A-->B3(fa:fa-user 會員資料)
將系統功能擁有的功能權限列出
- 購物車,擁有新增、檢視、變更、刪除功能權限
- 分析圖表,擁有檢視功能權限
- 會員資料,擁有新增、檢視、變更、刪除功能權限
但是不是每個使用者皆能擁有這些功能權限,假設一個是管理者,一個是一般使用者(購買者),就可以看出分析圖表僅有管理者擁有,而且會員資料兩者也不同。所以使用者通常對應著系統功能項目的權限,設計方式還是需要看使用情境決定。
graph LR subgraph 使用者 A1(fa:fa-user 管理者) A2(fa:fa-users 一般使用者) end subgraph 系統功能 A1-->|檢視 新增 修改 刪除|B1(fa:fa-cart-arrow-down 購物車) A1-->|檢視|B2(fa:fa-area-chart 分析圖表) A1-->|檢視 新增 修改 刪除|B3(fa:fa-user 會員資料) A2-->|檢視 新增 修改 刪除|B1(fa:fa-cart-arrow-down 購物車) A2-->|檢視 修改 刪除|B3(fa:fa-user 會員資料) end
位元運算與權限
上述的部分好像都沒提到位元運算,其實在設定新增、修改、刪除、檢視這幾項功能的時候,就可以使用。
功能 | 二進制 | 10進制 |
---|---|---|
新增 | 00000001 | 1 |
修改 | 00000010 | 2 |
刪除 | 00001000 | 8 |
檢視 | 00000100 | 4 |
稍微列出使用使用者對應的功能權限,功能權限應該是包含使用,例如:一般使用者同時擁有檢視、修改與刪除功能權限。
這部分做法就是使用 | 運算符了,其作法如下
1 | public enum OperList : byte |
這比較方式就是每一個 bit 去比較
使用者名稱 | 系統功能 | 功能權限二進制 | 功能權限10進制 |
---|---|---|---|
管理者 | 會員資料 | 00001111 | 15 |
一般使用者 | 會員資料 | 00001110 | 14 |
所以當想要判斷使用者是否擁有其功能權限,就可以改使用 & 運算符了。