Avec le développement continu d'Internet, le nombre d'utilisateurs de sites Web augmente. Afin de mieux gérer et assurer la sécurité des données des utilisateurs, l'authentification par autorité est devenue l'une des fonctions essentielles de tout site Web. Parmi les frameworks PHP, ThinkPHP est un framework très populaire et fournit également des fonctions complètes d'authentification d'autorité. Ainsi, cet article présentera en détail comment ThinkPHP utilise l'authentification par autorisation.
1. Le rôle de l'authentification par autorisation
L'authentification par autorisation est principalement utilisée pour contrôler les autorisations des utilisateurs dans différents rôles afin de garantir que les utilisateurs ne peuvent accéder qu'aux ressources pour lesquelles ils ont l'autorisation d'accéder et ne peuvent pas les utiliser au-delà de leur autorité. Par exemple, dans un site Web de commerce électronique, les administrateurs peuvent afficher et gérer toutes les informations sur les produits, tandis que les utilisateurs ordinaires peuvent uniquement parcourir les informations sur les produits et ne peuvent pas les modifier ou les supprimer.
2. Comment implémenter l'authentification d'autorité
Le framework ThinkPHP propose deux façons d'implémenter l'authentification d'autorité : RBAC et l'authentification d'autorité basée sur les nœuds. RBAC (Role-Based Access Control), c'est-à-dire le contrôle d'accès basé sur les rôles, classe les différents utilisateurs en fonction de leurs rôles. L'authentification d'autorité basée sur les nœuds contrôle l'autorité via les nœuds. Les nœuds peuvent être des contrôleurs, des méthodes d'exploitation, etc.
Pour implémenter l'authentification des autorisations via RBAC dans le framework, vous devez utiliser la classe Auth, qui se trouve dans ThinkPHPLibraryThink. Les étapes spécifiques sont les suivantes :
(1) Créez une table de nœuds et une table de rôles, et associez les nœuds d'autorisation aux rôles. La création d'une table de nœuds peut correspondre aux contrôleurs et aux méthodes de fonctionnement. La table des rôles enregistre le nom du rôle et l'ID du nœud correspondant, comme indiqué ci-dessous :
Table des nœuds (think_node) :
id | name | module | .contrôleur | action | pid |
---|---|---|---|---|---|
1 | index | home | index | index | 0 |
2 | ajouter | accueil | index | ajouter | 1 |
3 | edit | home | index | edit | 1 |
4 | delete | home | index | delete | 1 |
Table des rôles (think_role) :
id | name | node_ids |
---|---|---|
1 | admin | 1,2,3,4 |
2 | user | 1 |
(2 ) Utilisez la classe Auth dans le contrôleur pour l'authentification des autorisations. Le code spécifique est le suivant :
class IndexController extends Controller
{
public function __construct() { parent::__construct(); //实例化Auth类 $auth = new ThinkAuth(); //获取当前用户的角色ID $uid = session('user_id'); //获取当前请求的控制器和方法 $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME; //进行权限认证 if (!$auth->check($url, $uid)) { $this->error('您没有访问该页面的权限!'); } }
}
Dans le code ci-dessus, l'ID de rôle de l'utilisateur actuel et le contrôleur demandé sont obtenus en instanciant. la classe et la méthode Auth, puis utilisez la méthode $auth->check() pour l'authentification des autorisations. Si la vérification échoue, un message d'erreur sera affiché.
L'authentification des autorisations basée sur les nœuds peut être implémentée à l'aide de la classe Access fournie par le framework, qui se trouve également dans ThinkPHPLibraryThink. Les étapes spécifiques sont les suivantes :
(1) Utilisez la classe Access dans le contrôleur pour l'authentification des autorisations. Le code spécifique est le suivant :
class IndexController extends Controller
{
public function __construct() { parent::__construct(); //实例化Access类 $access = new ThinkAccess(); //获取当前用户的角色ID $uid = session('user_id'); //获取当前请求的控制器和方法 $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME; //定义权限节点列表 $nodes = array( 'Index/index',//首页 'Index/add',//添加页面 'Index/edit',//编辑页面 'Index/delete',//删除操作 ); //进行权限认证 if (!$access->check($nodes, $uid, $url)) { $this->error('您没有访问该页面的权限!'); } }
}
Dans le code ci-dessus, par. en instanciant la classe Access, obtenez l'ID de rôle de l'utilisateur actuel ainsi que le contrôleur et la méthode demandés, puis la méthode $access->check() est utilisée pour l'authentification des autorisations. Chaque élément de la liste des nœuds d'autorisation correspond à un nœud, à savoir un contrôleur et une méthode. Si la vérification échoue, un message d'erreur sera affiché.
3. Optimisation de l'authentification des autorisations
Dans les applications pratiques, nous devons également apporter quelques optimisations à l'authentification des autorisations pour améliorer la réutilisabilité et la sécurité du code. Les points d'optimisation spécifiques sont les suivants :
Vous pouvez créer un contrôleur public BaseController dans le module Common du framework et placer la logique de vérification des autorisations dans le contrôleur. Une fois que d'autres contrôleurs ont hérité de ce contrôleur, ils peuvent réutiliser cette partie du code.
Dans l'authentification des autorisations, la table des nœuds et la table des rôles doivent être interrogées à chaque fois, ce qui affectera les performances du système. Par conséquent, les résultats des requêtes peuvent être mis en cache pour améliorer les performances du système. Vous pouvez utiliser la classe de cache fournie par le framework pour mettre en cache les résultats de la requête. La prochaine fois que vous effectuerez une requête, vous pourrez directement obtenir les résultats mis en cache.
Afin d'améliorer la sécurité, nous pouvons crypter les informations sur les nœuds pour éviter toute exposition directe des informations sur les nœuds. Vous pouvez utiliser la classe de chiffrement fournie par l'infrastructure pour chiffrer l'ID du nœud et enregistrer les informations du nœud chiffrées dans la table des rôles.
4. Résumé
L'authentification par autorisation est un élément indispensable du développement de sites Web. Elle peut garantir la sécurité des données des utilisateurs et améliorer la gestion des utilisateurs. Dans le framework ThinkPHP, en utilisant les classes Auth et Access, la fonction d'authentification d'autorité peut être implémentée de manière très pratique. Grâce à l'introduction de cet article, vous pouvez comprendre les étapes et les méthodes d'optimisation pour utiliser l'authentification par autorisation dans ThinkPHP, ce qui, je pense, sera utile pour votre travail de développement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!