まず、あなたは空の値が何の許可を意味しないことを前提としなければなりません。このようにして、権限のないすべてのロール定義を省略できます。次に、フラグを使用できます。私はPHPの標準のように、一定の使用
define('LP_NEW_LOCK', 1); # 2**0
define('LP_NEW_UNLOCK', 2); # 2**1
define('LP_CHECKED_LOCK', 4); # 2**2
define('LP_CHECKED_UNLOCK', 8); # 2**3
(...)
define('LP_LOCK_ALL', 349525 ); # 2**0|2**2|2**4|2**6|2**8|2**10|2**12|2**14|2**16|2**18
define('LP_UNLOCK_ALL', 699050 ); # 2**1|2**3|2**5|2**7|2**9|2**11|2**13|2**15|2**17|2**19
define('LP_ALL', 1048575); # 2**20-2**0
が、あなたは(または直接整数)の変数を使用することができます:まず、フラグを定義します。フラグの規則は、それらがユニークな整数と2の累乗でなければならないということです(1,2,4,8,16,32、...)。 |
ビット単位の演算子でグループ化フラグを作成することもできます。すなわち、フル特権の「新規」は3(= 1 | 2)になります。
その後、あなたはこのように配列を作成することができます
$lockingPermissions = [
'admin' => LP_ALL,
'technician' => LP_LOCK_ALL,
'role3' => LP_NEW_LOCK | LP_NEW_UNLOCK | LP_CHECKED_LOCK,
'role4' => LP_LOCK_ALL^LP_NEW_LOCK, # lock all except new
'role5' => 0 # No permissions
];
この時点で、あなたはこのように仮想的な関数を呼び出すことができます。
このように
$perm = $lockingPermissions[$role];
とチェック権限:
if($perm & LP_NEW_LOCK) ...
変数を使用する場合は、関数内でグローバルとして宣言する必要があります。この場合、コードを単純化するために配列を使用することをお勧めします。
これは、役割と状態ごとに異なるロックオプションに対応していますか?しかし、それは私が把握しようとしていたものです。私は、それぞれの州と役割ごとに異なるロックとロック解除のオプションが必要です。 – Jonathan