Maison > Article > développement back-end > Partage de didacticiels de code source d'une vidéo pratique sur le développement ThinkPHP de projets de centres commerciaux à grande échelle
ThinkPHP est un framework PHP open source né pour simplifier le développement d'applications d'entreprise et le développement d'applications WEB agiles. Il est né début 2006, anciennement connu sous le nom de FCS. Il a été officiellement renommé ThinkPHP le jour du Nouvel An 2007 et a été publié dans le cadre de l'accord open source Apache2. L'architecture idéologique initiale est issue de Struts.Plus tard, après des améliorations et des améliorations continues, elle a également appris de nombreux excellents cadres et modèles étrangers, en utilisant la structure de développement orientée objet et le modèle MVC, intégrant les idées d'action et de DAO de Struts et la bibliothèque TagLib de JSP. ), le mappage ORM et le mode ActiveRecord de RoR, qui encapsule CURD et certaines opérations courantes, le mode d'entrée unique, etc., ont des performances uniques en termes de moteur de modèles, de mécanisme de mise en cache, de mécanisme d'authentification et d'évolutivité
Adresse de lecture du cours : http://www.php.cn/course/350.html
Le style d'enseignement du professeur :
Les cours sont conviviaux et naturels, sans prétention, ni prétentieux ni délibérément exagérés, mais parlent avec éloquence et prudence, créant une sorte d'égalité entre enseignants et étudiants dans une atmosphère collaborative et harmonieuse, silencieuse. des échanges émotionnels s'effectuent, et le désir et l'exploration des connaissances sont intégrés dans des situations d'enseignement simples et réelles. Les étudiants acquièrent des connaissances dans une réflexion calme et une approbation silencieuse
Le point le plus difficile de cette vidéo est l'introduction. de ThinkPHP-RBAC :
RBAC est l'acronyme de Role-Based Access Control, qui se traduit en chinois par contrôle d'accès basé sur les rôles. Pour parler franchement, les utilisateurs sont associés à des rôles et. autorisations [son architecture est inspirée du contrôle de gestion des autorisations du GBAC (GROUP-Based Access Control) du système d'exploitation]. En termes simples, un utilisateur peut avoir plusieurs rôles, et chaque rôle dispose de plusieurs autorisations. De cette manière, un modèle d'autorisation de type « permission de rôle d'utilisateur » est construit. Dans ce modèle, il existe généralement une relation plusieurs-à-plusieurs entre les utilisateurs et les rôles, ainsi qu'entre les rôles et les autorisations.
Dans de nombreuses applications pratiques, le système exige non seulement que les utilisateurs effectuent une inscription simple, mais nécessite également que différents niveaux d'utilisateurs accèdent à différentes ressources. différentes autorisations d'exploitation. Et dans le développement des entreprises, le système de gestion des droits est devenu l'un des modules les plus efficaces pour le développement répété. Dans plusieurs systèmes, la gestion des autorisations correspondante ne peut répondre qu'aux besoins de gestion du propre système. Elle peut être différente en termes de conception de la base de données, d'accès aux autorisations et de mécanismes de gestion des autorisations. Cette incohérence a également les conséquences suivantes :
. Maintenir plusieurs systèmes et réinventer la roue est une perte de temps
La maintenance répétée des données telles que la gestion des utilisateurs et les mécanismes organisationnels rend difficile la garantie de l'intégrité et de la cohérence des données
Différentes conceptions de systèmes d'autorisation, différentes compréhensions conceptuelles et différences techniques correspondantes, il existe des problèmes d'intégration entre les systèmes, l'authentification unique est difficile et les systèmes d'entreprise complexes apportent également des difficultés
RBAC est basé sur une pratique continue Après cela, un contrôle d'accès relativement mature Un schéma a été proposé. La pratique a montré que l'utilisation d'un système de gestion des autorisations basé sur le modèle RBAC présente les avantages suivants : Étant donné que les changements entre les rôles et les autorisations sont relativement plus lents que les changements entre les rôles et les relations entre les utilisateurs, la complexité de la gestion des autorisations est réduite et les frais de gestion sont réduits. Et il peut prendre en charge de manière flexible la politique de sécurité du système d'application et a une grande évolutivité aux changements dans le système d'application ; en termes de fonctionnement, la distribution des autorisations est intuitive, facile à comprendre et les autorisations hiérarchiques conviennent aux utilisateurs hiérarchiques ; formes de niveau ; réutilisation du sexe fort.
Le système d'implémentation RBAC dans ThinkPHP
RBAC dans ThinkPHP est basé sur le système de sécurité Acegi de Java Spring comme prototype de référence, et a été simplifié en conséquence pour s'adapter à la structure ThinkPHP actuelle, fournissant un système multi- Un système de sécurité en couches et personnalisable pour fournir un contrôle de sécurité pour le développement d'applications. Le système de sécurité comprend principalement les parties suivantes :
Intercepteur de sécurité
Gestionnaire d'authentification
Gestionnaire d'accès aux décisions
Exécution d'Identity Manager
Sécurité Intercepteur
L'intercepteur de sécurité est comme une porte. Il peut y avoir de nombreux liens de contrôle de sécurité différents dans le système de protection de sécurité du système. Une fois que vous ne réussissez pas la certification du système de sécurité dans un certain lien, l'intercepteur de sécurité Le serveur le fera. mettre en œuvre l’interception.
Gestionnaire d'authentification
La première porte du système de protection est le gestionnaire d'authentification. Le gestionnaire d'authentification est chargé de déterminer qui vous êtes. Généralement, il vérifie votre sujet (généralement un nom d'utilisateur) et votre. informations d'identification (généralement un mot de passe) ou plus d'informations pour ce faire. Pour faire plus simple, le gestionnaire d'authentification vérifie que votre identité entre dans le périmètre d'autorisation du système de protection de sécurité.
Gestion des décisions d'accès
Bien que vous ayez réussi la vérification d'identité du gestionnaire d'authentification, cela ne signifie pas que vous pouvez faire ce que vous voulez dans le système, car vous devez toujours accéder à la porte de gestion des décisions. Le gestionnaire de décision d'accès autorise les utilisateurs et détermine si vous pouvez accéder à un certain module du système et effectuer une certaine opération en tenant compte de vos informations d'authentification d'identité et des attributs de sécurité associés aux ressources protégées. Par exemple, si les règles de sécurité stipulent que seuls les superviseurs sont autorisés à accéder à un certain module et que vous ne disposez pas des autorisations de superviseur, l'intercepteur de sécurité interceptera votre opération d'accès.
Le gestionnaire d'accès décisionnel ne peut pas fonctionner seul et doit d'abord s'appuyer sur le gestionnaire d'authentification pour la confirmation de l'identité. Par conséquent, le gestionnaire d'authentification et le gestionnaire d'accès décisionnel sont déjà inclus lors du chargement du filtre de décision d'accès.
Afin de répondre aux différents besoins des applications, ThinkPHP adopte deux modes lors de la gestion des décisions d'accès : le mode connexion et le mode instantané. En mode connexion, le système lit et modifie les informations d'autorisation de l'utilisateur sur la session lorsque l'utilisateur se connecte, et n'obtient pas à nouveau les informations d'autorisation la prochaine fois. C'est-à-dire que même si l'administrateur apporte des modifications aux autorisations de l'utilisateur, les modifications ne prendront effet qu'après la prochaine connexion de l'utilisateur. Le mode immédiat consiste à résoudre le problème ci-dessus. Chaque fois qu'un module ou une opération du système est accédé, il est immédiatement vérifié si l'utilisateur dispose de l'autorisation pour le module et l'opération, garantissant ainsi la sécurité du système à un degré plus élevé.
Exécuter Identity Manager
L'utilité de l'exécution d'Identity Manager est limitée dans la plupart des systèmes d'application. Par exemple, si une certaine opération ou un module nécessite la sécurité de plusieurs identités, Exécutez Identity Manager Vous pouvez remplacer. votre identité actuelle avec une autre identité, vous permettant d'accéder aux objets protégés plus profondément dans le système d'application. Cette couche de système de sécurité n'est actuellement pas implémentée dans RBAC.
Processus d'authentification RBAC dans ThinkPHP
Correspondant au système de sécurité ci-dessus, le processus d'authentification RBAC de ThinkPHP est à peu près le suivant :
Déterminer si le fonctionnement actuel du module actuel nécessite une authentification
Si l'authentification est requise et que vous n'êtes pas connecté, accédez à la passerelle d'authentification. Si vous êtes déjà connecté, exécutez 5
Authentification de l'identité de l'utilisateur via l'authentification déléguée
<.>Obtenir la liste d'accès décisionnelle de l'utilisateurDéterminer si l'utilisateur actuel dispose de droits d'accèsLe processus spécifique de mise en œuvre de la gestion des droitsIntroduction aux bases de données liées au RBACLe package complet ThinkPHP comprend le fichier RBAC.class .php de la classe de traitement RBAC, situé dans Extend/Library/ORG/Util. Ouvrez le fichier qui contient les 4 tables nécessaires à l'utilisation de RBAC. Les instructions SQL sont les suivantes (veuillez remplacer le préfixe de la table après la copie) :CREATE TABLE IF NOT EXISTS `ly_access` ( `role_id` smallint(6) unsigned NOT NULL, `node_id` smallint(6) unsigned NOT NULL, `level` tinyint(1) NOT NULL, `module` varchar(50) DEFAULT NULL, KEY `groupId` (`role_id`), KEY `nodeId` (`node_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `ly_node` ( `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `title` varchar(50) DEFAULT NULL, `status` tinyint(1) DEFAULT '0', `remark` varchar(255) DEFAULT NULL, `sort` smallint(6) unsigned DEFAULT NULL, `pid` smallint(6) unsigned NOT NULL, `level` tinyint(1) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `level` (`level`), KEY `pid` (`pid`), KEY `status` (`status`), KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `ly_role` ( `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `pid` smallint(6) DEFAULT NULL, `status` tinyint(1) unsigned DEFAULT NULL, `remark` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `pid` (`pid`), KEY `status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; CREATE TABLE IF NOT EXISTS `ly_role_user` ( `role_id` mediumint(9) unsigned DEFAULT NULL, `user_id` char(32) DEFAULT NULL, KEY `group_id` (`role_id`), KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Matériaux
Documents
Code source
Illustration
Modèle
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!