權(quán)限控制

2018-01-05 11:36 更新

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

知識(shí)準(zhǔn)備

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

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

前言

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

設(shè)計(jì)思路

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

基礎(chǔ)原理

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

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

最后說(shuō)兩句

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)