看源碼的小伙伴已經(jīng)注意到了權限部分,在項目介紹中我說到:“專為API設計的權限”!那么
ApiAdmin
的權限有什么特殊?權限管理作為管理后臺中一塊重要基石,ApiAdmin
又是如何兼顧效率和多元化配置的呢?
在閱讀本文之前,需要大家具備一定的計算機基礎知識,當然現(xiàn)學現(xiàn)賣也可以哦!
后臺管理系統(tǒng)做了好些個了,隨著技術的發(fā)展,管理后臺開發(fā)不在局限于web
頁面,管理后臺也不在僅僅只是管理網(wǎng)站了。我們希望能在微信企業(yè)號上登陸我們的管理系統(tǒng),我們也希望一個管理系統(tǒng)能夠管理PC端網(wǎng)站的同時還要管理觸屏端網(wǎng)站,管理APP端。所以迫切的需要將傳統(tǒng)的管理系統(tǒng)的頁面和后臺解耦,API
成為一個很不錯的選擇!RESTFul
架構應運而生,同一個URL
請求由于METHOD
的不一樣,導致了它們的作用不一樣,傳統(tǒng)的基于URL
的認證方式(AUTH
認證,RBAC
認證...)顯得力不從心。ApiAdmin
針對這樣的需求重新設計了一套正對API的權限認證方式,我們稱它為Permission權限認證
。
對于權限而言,說白了就是Yes OR No
,而我們的二進制就是1 OR 0
,是不是天然就適配的權限的需求?計算機在處理二進制的時候是沒有任何性能壓力的(我覺得那天系統(tǒng)優(yōu)化到二進制層面,我感覺就是極限優(yōu)化了),那么使用頻率很高的權限系統(tǒng)為什么不用二進制來設計呢?
為了方便大家理解,我們這里約定一個字節(jié)是8個二進制位(其實我們只用到了4個二進制位),同時我們約定每個二進制位的具體含義(0000[前四位只是補位] 0[GET]0[PUT]0[POST]0[DEL])。如果一個用戶的權限為十進制8(00001000)那么將其與8(00001000)做邏輯與運算那么結果就是8(00001000)大于0為真,表示當前用戶有GET權限。同樣的我們將十進制8(00001000)與4(00000100)做邏輯與運算,結果是0(00000000)為假,表示當前用戶不具備PUT權限。說道這里,權限的判斷就出來了!是不是很容易呢?
當然如果一個用戶同時屬于兩個組,這兩個組的權限分別為8(00001000)和4(00000100),那么這個用戶的權限就是8(00001000)和4(00000100)做邏輯或運算12(00001100),這時候我們分別用12(00001100)和8(00001000)、12(00001100)和4(00000100)做邏輯與運算,我們發(fā)現(xiàn)結果分別為8(00001000)和4(00000100),都大于0為真,表示當前用戶擁有GET和PUT權限。
反正我是看懂了,但是確實有點繞,多看幾遍應該能理解!如果對于這樣的權限認證方式,您有更好的想法,或者我哪里說的不對,歡迎提出來。
更多建議: