Zunächst einmal muss man davon ausgehen, dass ein leerer Wert bedeutet keine Genehmigung. Auf diese Weise können Sie alle Rollendefinitionen ohne Berechtigung überspringen. Dann können Sie Flags verwenden. Zunächst definieren die Fahnen:
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
I Konstante verwenden, wie PHP-Standard, aber Sie können Variablen (oder direkt den ganzen Zahlen) verwenden. Regel für Flag sind, dass sie eindeutige ganze Zahlen und Potenzen von 2 sein müssen (1, 2, 4, 8, 16, 32, ...). Sie können Gruppierungsflags auch mit |
Bitwise-Operator erstellen: d. H., Full-Privilegien für "neu" kann 3 (= 1 | 2) sein.
Dann können Sie das Array auf diese Weise erstellen:
$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
];
An dieser Stelle können Sie eine hypothetische Funktion auf diese Weise nennen:
$perm = $lockingPermissions[$role];
und Berechtigungen überprüfen auf diese Weise:
if($perm & LP_NEW_LOCK) ...
Wenn Sie Variablen verwenden möchten, müssen Sie in der Funktion als global deklarieren. In diesem Fall empfehle ich Ihnen, ein Array zu verwenden, um den Code zu vereinfachen.
Passt dies zu unterschiedlichen Sperroptionen für jede Rolle und jeden Status? Tolle Idee, das habe ich versucht herauszufinden. Ich brauche nur verschiedene Lock- und Unlock-Optionen für jeden Status und jede Rolle. – Jonathan