Lors du développement de systèmes de contrôle des autorisations, la gestion des rôles et des autorisations est un aspect important. Grâce à une allocation d'autorisation raisonnable, nous pouvons nous assurer que les différents rôles ont un contrôle précis sur l'accès aux ressources. PHP fournit de nombreux outils pour nous aider à atteindre cet objectif. array_diff_key () est une fonction très utile qui peut comparer les rôles et les autorisations lors du traitement du contrôle d'autorisation. Cet article présentera comment utiliser array_diff_key () pour comparer les rôles et les autorisations pour réaliser une gestion plus précise de l'autorisation.
La fonction array_diff_key () est utilisée pour calculer des éléments avec différents noms de clés entre deux tableaux ou plus. Plus précisément, il renvoie un tableau contenant des paires de valeurs clés qui sont dans le premier tableau mais pas dans les autres tableaux.
Prototype de fonction:
array_diff_key(array $array1, array $array2, array ...$arrays): array
$ Array1 : Le premier tableau à comparer.
$ Array2 : Autre tableau à comparer avec le premier tableau.
Retour: Renvoie une paire de valeurs de clé contenant les noms de clés qui existent dans le premier tableau mais pas dans les autres tableaux.
Dans la gestion de l'autorisation, nous avons généralement deux types de tableaux:
Tableau de rôle : contient les autorisations du rôle et du rôle.
Tableau d'autorisation du système : contient toutes les autorisations soutenues par le système.
Supposons que nous ayons deux types de tableaux:
// Tableau d'autorisation de rôle
$rolePermissions = [
'view_dashboard' => true,
'edit_profile' => true,
'delete_account' => false,
];
// Tableau d'autorisation du système
$systemPermissions = [
'view_dashboard' => true,
'edit_profile' => true,
'delete_account' => true,
'create_report' => false,
];
Dans l'exemple ci-dessus, le tableau $ rolePermissions représente les autorisations d'un rôle, et le tableau $ SystemPermissions représente toutes les autorisations possibles dans le système.
Supposons que nous devons découvrir les autorisations que le rôle actuel n'a pas, ou comparer la différence entre les autorisations de rôle et les autorisations système, nous pouvons utiliser la fonction Array_Diff_Key () pour les implémenter.
Nous pouvons utiliser array_diff_key () pour découvrir les autorisations qui manquent dans le rôle actuel. Comme indiqué ci-dessous:
// Calculer les autorisations manquantes pour les rôles
$missingPermissions = array_diff_key($systemPermissions, $rolePermissions);
// Sortie des autorisations manquantes
print_r($missingPermissions);
Le résultat de la sortie est:
Array
(
[create_report] => false
)
Cela signifie que le rôle n'a pas l'autorisation create_report . Bien que cette autorisation soit disponible dans le système, le rôle n'est pas accordé.
Avec array_diff_key () , nous pouvons facilement comparer les différences d'autorisation entre les rôles et les systèmes. Cependant, pour obtenir une gestion plus précise de l'autorisation, nous pouvons également étendre cette méthode pour effectuer des vérifications d'autorisation dynamique en combinaison avec les rôles utilisateur et les exigences d'autorisation.
Par exemple, nous pouvons décider dynamiquement d'autoriser l'autorisation des opérations en fonction du rôle de l'utilisateur et des autorisations demandées dans le contrôleur:
function checkPermission($rolePermissions, $systemPermissions, $requestedPermission)
{
// Vérifiez si l'autorisation est incluse dans les autorisations de rôle
if (isset($rolePermissions[$requestedPermission])) {
return $rolePermissions[$requestedPermission];
}
// Si cette autorisation n'est pas dans l'autorisation de rôle,Vérifiez si les autorisations du système sont dans le
if (isset($systemPermissions[$requestedPermission])) {
return $systemPermissions[$requestedPermission];
}
return false;
}
$requestedPermission = 'create_report';
if (checkPermission($rolePermissions, $systemPermissions, $requestedPermission)) {
echo "Permission granted!";
} else {
echo "Permission denied!";
}
Dans cet exemple, nous pouvons contrôler de manière flexible si l'utilisateur est autorisé à effectuer une opération en fonction des résultats de comparaison des autorisations de rôle et des autorisations système.
En utilisant la fonction Array_Diff_Key () de PHP, nous pouvons comparer efficacement les autorisations de rôle avec les autorisations système, réalisant ainsi une gestion plus précise des autorisations. De cette façon, les développeurs peuvent s'assurer que différents rôles ne peuvent accéder qu'à leurs fonctionnalités autorisées, améliorant ainsi la sécurité du système.
Dans les applications réelles, la conception du contrôle de l'autorisation dépend non seulement d'une seule fonction, mais considère également de manière approfondie la relation entre les rôles et les autorisations, ajustez de manière flexible les paramètres d'autorisation du système et implémentez finalement un système complet de gestion de l'autorisation.