Uvažovali jste o uložení vašich oprávnění jako celého čísla, přičemž každé oprávnění má binární hodnotu (tj. 1,2,4,8,16) a sečtete všechna jejich oprávnění. Poté můžete zkontrolovat, zda mají dané oprávnění pomocí operátoru &
Asi takhle:
if ($accessLevel & $userPermissions)
To vám dává mnohem použitelnější systém než ukládání binárního čísla
Jak bylo požadováno v komentářích, trochu více informací.
Nastavili byste svou tabulku uživatelů tak, aby měla celočíselné pole pro uložení vašich oprávnění. Každá z vašich úrovní oprávnění by měla binární násobek (zde neznám správný výraz), který odpovídá hodnotě binárního bitu. Například:
Read - 1
Edit - 2
Create - 4
Delete - 8
A tak dále, kolik je potřeba. Chcete-li vytvořit úroveň oprávnění uživatele, NEBO hodnoty společně. Předpokládejme, že výše uvedené úrovně jsou uloženy ve třídě jako statické hodnoty, vytvořili byste ji takto:
$newUser->Permissions = Permissions::Read | Permissions::Create;
Což vám dává uživatele, který může číst a vytvářet, ale ne upravovat nebo mazat.
Chcete-li zkontrolovat, zda má uživatel oprávnění k provedení akce, použijte AND:
if ($newUser->Permissions & Permissions::Read) {
echo 'You can do this!';
} else {
echo 'You can't this!';
}
Získáte tak jedno jednoduché pole databáze, které je tak rozšiřitelné, jak budete reálně potřebovat, a snadno použitelné kontroly a změny. Můžete také zvážit uložení úrovní oprávnění do jiné tabulky atd., podle toho, jakou úroveň přizpůsobení budete potřebovat.