Dans le système Web, le contrôle de l'autorisation des utilisateurs est une partie extrêmement importante. Un système d'autorisation raisonnable peut non seulement protéger les données sensibles du système, mais également garantir que les utilisateurs ne peuvent accéder qu'au contenu auquel ils doivent accéder. En PHP, nous pouvons utiliser la fonction religtec () pour combiner les opérations de bit pour construire un mécanisme de contrôle d'autorisation efficace et facile à étendre. Cet article présentera en détail comment utiliser ces deux pour créer un système d'autorisation utilisateur.
L'idée principale du contrôle de l'autorisation est de résumer chaque autorisation dans un binaire binaire. Par exemple, un champ d'autorisation 8 bits peut représenter 8 types d'autorisations, et 1 ou 0 sur chaque bit indique si l'autorisation est activée.
Par exemple, supposons que les autorisations suivantes soient définies:
Position d'autorisation | Valeur d'autorisation | Nom d'autorisation |
---|---|---|
0 | 1 | Afficher le contenu |
1 | 2 | Modifier le contenu |
2 | 4 | Supprimer le contenu |
3 | 8 | Examiner le contenu |
4 | 16 | Gérer les utilisateurs |
5 | 32 | Poster le contenu |
6 | 64 | Voir le rapport |
7 | 128 | Super administrateur |
Les autorisations d'un utilisateur peuvent être représentées par une chaîne binaire (par exemple "10101010" ) représentant un ensemble d'autorisations activées et désactivées. Nous pouvons utiliser Bindec () pour convertir cette chaîne en un numéro décimal, puis utiliser les opérations de bits pour déterminer si une certaine autorisation est activée.
Supposons d'abord que la valeur d'autorisation d'un certain utilisateur soit de 170 , c'est-à-dire 10101010 en binaire, et il a des autorisations 1, 3, 5 et 7.
Nous pouvons utiliser le code suivant pour déterminer si nous avons une certaine autorisation:
<?php
// Définir les constantes d'autorisation
define('PERM_VIEW', 1); // 00000001
define('PERM_EDIT', 2); // 00000010
define('PERM_DELETE', 4); // 00000100
define('PERM_APPROVE', 8); // 00001000
define('PERM_USER', 16); // 00010000
define('PERM_PUBLISH', 32); // 00100000
define('PERM_REPORT', 64); // 01000000
define('PERM_ADMIN', 128); // 10000000
// Supposons que la valeur d'autorisation d'un utilisateur est170(Binaire10101010)
$userPermissions = 170;
// Vérifiez s'il y a une autorisation d'édition
if ($userPermissions & PERM_EDIT) {
echo "L'utilisateur a des autorisations d'édition";
} else {
echo "L'utilisateur n'a pas d'autorisations d'édition";
}
?>
Le code ci-dessus utilise l'opérateur & Opérateur pour déterminer si le bit d'autorisation spécifié est 1. De cette façon, nous pouvons facilement déterminer si l'utilisateur a des autorisations spécifiques.
Pour donner des autorisations à l'utilisateur, vous n'avez qu'à effectuer ou à calculer le bit d'autorisation ( | ):
<?php
$userPermissions = 0; // L'autorisation initiale est0
// Ajouter à“Afficher le contenu”et“Poster le contenu”Autorisation
$userPermissions |= PERM_VIEW;
$userPermissions |= PERM_PUBLISH;
echo $userPermissions; // La sortie est33
?>
La révocation d'une certaine autorisation nécessite des opérations non ( & ~ ):
<?php
// 原始Autorisation为:Parcourir、modifier、libérer(Tout de suite 1 + 2 + 32 = 35)
$userPermissions = 35;
// Révoquer“modifier”Autorisation
$userPermissions &= ~PERM_EDIT;
echo $userPermissions; // Le résultat est33
?>
Les valeurs d'autorisation peuvent éventuellement être enregistrées dans les champs de base de données, tels que le champ d'autorisations de la table des utilisateurs , de type int :
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
permissions INT DEFAULT 0
);
Lisez les autorisations des utilisateurs et vérifiez:
<?php
// 假设从数据库中取出Autorisation字段为 $permissions
$permissions = 170;
if ($permissions & PERM_DELETE) {
echo "Vous pouvez supprimer du contenu";
} else {
echo "Vous n'avez pas la permission de supprimer le contenu";
}
?>
En prenant un système de gestion des antécédents à titre d'exemple, lorsqu'un administrateur se connecte, le système doit déterminer s'il faut afficher certains boutons de fonction. Vous pouvez le contrôler dans le modèle par:
<?php
if ($adminPermissions & PERM_USER) {
echo '<a href="https://m66.net/admin/users">Gérer les utilisateurs</a>';
}
?>
Cette méthode de contrôle d'autorisation implémentée via les opérations de bit présente les avantages suivants:
Économies de stockage : Toutes les autorisations sont fusionnées dans un champ entier, ce qui permet d'économiser de l'espace.
Requête efficace : le jugement de l'autorisation est terminé par le biais des opérations de bit, et la vitesse est extrêmement rapide.
Flexibilité d'extension : ajoutez simplement un nouveau bit d'autorisation pour ajouter un nouveau type d'autorisation.
Convient pour les systèmes ou scénarios de petite et moyenne taille avec des types d'autorisation relativement fixes. Si les autorisations du système sont complexes et nécessitent un contrôle multidimensionnel, il est recommandé d'utiliser le modèle RBAC (Contrôle d'accès basé sur les rôles) combiné avec la base de données pour atteindre une gestion granulaire plus fine.
Grâce à la combinaison de Bindec () et de l'opération de bits, nous pouvons implémenter une méthode de gestion des autorisations utilisateur simple et efficace. Il est très pratique de manipuler les binaires et les entiers en PHP, et est très adapté à la construction de systèmes de contrôle d'autorisation légers. Dans les projets réels, il est recommandé d'encapsuler les constantes d'autorisation et la logique de jugement dans les classes ou les fonctions pour améliorer la maintenabilité et la lisibilité.