權限控制

2018-01-05 11:36 更新

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

知識準備

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

  • 二級制
  • 二進制和十進制互相轉換
  • 位運算
  • PHP基礎

前言

后臺管理系統(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權限。

最后說兩句

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

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號