目的

  • 權限之於二進制多選用法

基礎知識

兩個運算規則

  • 邏輯與,口訣,有0為0
  • 邏輯或,口訣,有1為1

使用二進制存取多選信息,應用範圍,如存取用戶權限,功能權限,方向控制等.需要實現預期的結果,首先需要定權值,權值必須是$2^n$.然後通過邏輯或存儲最終擁有的權限,用邏輯與判斷是否擁有該權限

設定權限

定義操作權限

  • 新增=2^0,二進制0001
  • 編輯=2^1,二進制0010
  • 刪除=2^2,二進制0100
  • 查詢=2^3,二進制1000

邏輯或運算存儲權限

假設用戶a擁有新增和刪除權限(a權限)=2^0 2^2=0001 0100=0101=5,所以a用戶最終權值為5.

假設用戶b擁有編輯和查詢權限(b權限)=2^1 2^3=0010 1000=1010=10,所以b用戶最終權值為10.

綜上就可以在資料庫中設計一個number列分別存儲a和b的權值5 ,10;

邏輯與權限判斷

在做權限判斷時,需要要將權限值挨個同存儲權限比較,結果值大於0表示擁有此權限用戶a存儲值5,對應二進制0101

  • 新增0001&0101 =0001=1 > 0 有權限
  • 編輯0010&0101 =0000=0 = 0 無權限
  • 刪除0100&0101 =0100=4 > 0 有權限
  • 查詢1000&0101 =0000=0 = 0 無權限

範例

<?php

const ADD = 1 << 0;
const EDIT = 1 << 1;
const DEL = 1 << 2;
const SEARCH = 1 << 3;

$a = ADD | DEL;
$b = DEL | SEARCH;

if ( (ADD & $a) > 0 ) var_dump('有新增');
if ( (EDIT & $a) > 0 ) var_dump('有編輯');
if ( (DEL & $a) > 0 ) var_dump('有刪除');
if ( (SEARCH & $a) > 0 ) var_dump('有查詢');