權(quán)限控制

2018-01-05 11:36 更新

看源碼的小伙伴已經(jīng)注意到了權(quán)限部分,在項目介紹中我說到:“專為API設(shè)計的權(quán)限”!那么ApiAdmin的權(quán)限有什么特殊?權(quán)限管理作為管理后臺中一塊重要基石,ApiAdmin又是如何兼顧效率和多元化配置的呢?

知識準(zhǔn)備

在閱讀本文之前,需要大家具備一定的計算機基礎(chǔ)知識,當(dāng)然現(xiàn)學(xué)現(xiàn)賣也可以哦!

  • 二級制
  • 二進(jìn)制和十進(jìn)制互相轉(zhuǎn)換
  • 位運算
  • PHP基礎(chǔ)

前言

后臺管理系統(tǒng)做了好些個了,隨著技術(shù)的發(fā)展,管理后臺開發(fā)不在局限于web頁面,管理后臺也不在僅僅只是管理網(wǎng)站了。我們希望能在微信企業(yè)號上登陸我們的管理系統(tǒng),我們也希望一個管理系統(tǒng)能夠管理PC端網(wǎng)站的同時還要管理觸屏端網(wǎng)站,管理APP端。所以迫切的需要將傳統(tǒng)的管理系統(tǒng)的頁面和后臺解耦,API成為一個很不錯的選擇!RESTFul架構(gòu)應(yīng)運而生,同一個URL請求由于METHOD的不一樣,導(dǎo)致了它們的作用不一樣,傳統(tǒng)的基于URL的認(rèn)證方式(AUTH認(rèn)證,RBAC認(rèn)證...)顯得力不從心。ApiAdmin針對這樣的需求重新設(shè)計了一套正對API的權(quán)限認(rèn)證方式,我們稱它為Permission權(quán)限認(rèn)證

設(shè)計思路

對于權(quán)限而言,說白了就是Yes OR No,而我們的二進(jìn)制就是1 OR 0,是不是天然就適配的權(quán)限的需求?計算機在處理二進(jìn)制的時候是沒有任何性能壓力的(我覺得那天系統(tǒng)優(yōu)化到二進(jìn)制層面,我感覺就是極限優(yōu)化了),那么使用頻率很高的權(quán)限系統(tǒng)為什么不用二進(jìn)制來設(shè)計呢?

基礎(chǔ)原理

為了方便大家理解,我們這里約定一個字節(jié)是8個二進(jìn)制位(其實我們只用到了4個二進(jìn)制位),同時我們約定每個二進(jìn)制位的具體含義(0000[前四位只是補位] 0[GET]0[PUT]0[POST]0[DEL])。如果一個用戶的權(quán)限為十進(jìn)制8(00001000)那么將其與8(00001000)做邏輯與運算那么結(jié)果就是8(00001000)大于0為真,表示當(dāng)前用戶有GET權(quán)限。同樣的我們將十進(jìn)制8(00001000)與4(00000100)做邏輯與運算,結(jié)果是0(00000000)為假,表示當(dāng)前用戶不具備PUT權(quán)限。說道這里,權(quán)限的判斷就出來了!是不是很容易呢?

當(dāng)然如果一個用戶同時屬于兩個組,這兩個組的權(quán)限分別為8(00001000)和4(00000100),那么這個用戶的權(quán)限就是8(00001000)和4(00000100)做邏輯或運算12(00001100),這時候我們分別用12(00001100)和8(00001000)、12(00001100)和4(00000100)做邏輯與運算,我們發(fā)現(xiàn)結(jié)果分別為8(00001000)和4(00000100),都大于0為真,表示當(dāng)前用戶擁有GET和PUT權(quán)限。

最后說兩句

反正我是看懂了,但是確實有點繞,多看幾遍應(yīng)該能理解!如果對于這樣的權(quán)限認(rèn)證方式,您有更好的想法,或者我哪里說的不對,歡迎提出來。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號