ThinkPHP は、エンタープライズ アプリケーション開発とアジャイル WEB アプリケーション開発を簡素化するために生まれたオープンソースの PHP フレームワークです。これは 2006 年初頭に初めて誕生し、以前は FCS として知られていましたが、2007 年の元旦に正式に ThinkPHP に名前が変更され、Apache2 オープンソース契約に基づいてリリースされました。初期のイデオロギー アーキテクチャは Struts に由来し、その後、継続的な改良を経て、オブジェクト指向開発構造と MVC モデルを使用し、Struts の Action と DAO のアイデアと JSP の TagLib ( タグ ライブラリ) を統合して、多くの優れた外国のフレームワークとモデルからも学びました。 )、RoR の ORM マッピングと、CURD といくつかの一般的な操作、シングル エントリ モードなどをカプセル化する ActiveRecord モードは、テンプレート エンジン、キャッシュ メカニズム、認証メカニズム、スケーラビリティにおいて独自のパフォーマンスを備えています
コース再生アドレス: http://www.php.cn/course/350.html
先生の教え方:
講義はフレンドリーで自然で、気取らず、気取ったり、意図的に誇張したりすることはありませんが、先生は雄弁かつ慎重に話します。そして、生徒たちは平等、協力、調和の雰囲気の中で静かに感情的な交流を持ち、知識の渇望と探求をシンプルで現実的な教育状況に統合します。生徒たちは静かに考え、静かに承認することによって知識を獲得します
これのさらに難しい点です。ビデオは ThinkPHP-RBAC の紹介です:
RBAC は、Role-Based Access Control の頭字語で、中国語に訳すとロールベースと訳されますが、許可アクセス制御とは、端的に言えば、ユーザーが許可に関連付けられることを意味します。役割を通じて [そのアーキテクチャは、オペレーティング システムの GBAC (GROUP-Based Access Control) の権限管理制御からインスピレーションを得ています]。簡単に言うと、ユーザーは複数のロールを持つことができ、各ロールには複数の権限があります。このようにして、「ユーザー-ロール-権限」認可モデルが構築されます。このモデルでは、通常、ユーザーとロールの間、およびロールと権限の間に多対多の関係が存在します。
多くの実際のアプリケーションでは、システムはユーザーに簡単な登録を完了させるだけでなく、異なるリソースにアクセスするために異なるレベルのユーザーに対して異なる操作権限も必要とします。また、エンタープライズ開発において、権利管理システムは、繰り返し開発を行うための最も効率的なモジュールの 1 つとなっています。複数のシステムでは、対応する権限管理は、データベース設計、権限アクセス、および権限管理メカニズムの点で異なる場合があります。
複数のシステムの維持。車輪の再発明では、最先端で時間が無駄になります
ユーザー管理、組織メカニズム、その他のデータは繰り返し保守され、データの完全性と一貫性を保証するのが困難です
権限システムの設計が異なり、概念的な理解も異なります、およびそれに対応する技術的な違いにより、システム間の統合に問題があり、シングル サインオンが難しく、複雑なエンタープライズ システムでは困難が生じます。RBAC は、継続的な実践に基づいた比較的成熟したアクセス制御ソリューションです。実際に、RBAC モデルに基づく権限管理システムを使用すると、次のような利点があることがわかっています。 役割と権限間の変更は、役割とユーザー関係間の変更よりも比較的遅いため、権限管理の複雑さが軽減され、管理オーバーヘッドが軽減されます。また、アプリケーション システムのセキュリティ ポリシーに柔軟に対応でき、アプリケーション システムの変更に対する優れた拡張性を備えています。操作に関しては、階層的な権限の配布が直感的で理解しやすく、階層的なユーザーに適しています。レベルフォームを再利用します。 ThinkPHP の
RBAC 実装システム
ThinkPHP の RBAC は、Java ベースの Spring の Acegi セキュリティ システムを参照プロトタイプとして使用し、現在の ThinkPHP 構造に適応して多層のカスタマイズ可能なセキュリティ システムを提供するように簡素化されています。アプリケーション開発のコントロール。セキュリティ システムには主に次の部分があります:
セキュリティ インターセプター
認証マネージャー
意思決定アクセス マネージャー
実行中のアイデンティティ マネージャー
セキュリティ インターセプター
セキュリティ インターセプターは、システムのセキュリティにおけるドアのようなものです。保護システム内のさまざまなセキュリティ制御リンク。特定のリンクでセキュリティ システムの認証に合格しないと、セキュリティ インターセプタがそのリンクを傍受します。
認証マネージャー
保護システムの最初のドアは認証マネージャーです。通常、認証マネージャーは、ユーザーの主体 (通常はユーザー名) と資格情報 (通常はパスワード) を確認します。そのための詳細情報。より簡単に言うと、認証マネージャーは、ユーザーの ID がセキュリティ保護システムの承認範囲内にあることを確認します。
意思決定管理を参照
認証管理者の本人確認に合格しましたが、意思決定管理のドアにアクセスする必要があるため、システム内で何をしてもよいというわけではありません。アクセス決定マネージャーはユーザーを認可し、ID 認証情報と保護されたリソースに関連付けられたセキュリティ属性を考慮して、ユーザーがシステムの特定のモジュールに入って特定の操作を実行できるかどうかを決定します。たとえば、セキュリティ ルールでスーパーバイザのみが特定のモジュールにアクセスできると規定されているのに、スーパーバイザのアクセス許可が付与されていない場合、セキュリティ インターセプタがアクセス操作を傍受します。
意思決定アクセス マネージャーは単独で実行できず、ID 確認のために最初に認証マネージャーに依存する必要があります。そのため、認証マネージャーと意思決定アクセス マネージャーは、アクセス決定フィルターをロードするときにすでに組み込まれています。
アプリケーションのさまざまなニーズを満たすために、ThinkPHP はアクセス決定管理を実行する際に、ログイン モードとインスタント モードという 2 つのモードを採用します。ログインモードでは、ユーザーのログイン時にシステムがユーザーの認可情報を読み取ってセッションに変更し、次回からは認可情報を再取得しません。つまり、管理者がユーザーの権限を変更した場合でも、その変更はユーザーが次回ログインした後にのみ有効になります。即時モードは、システムのモジュールや操作にアクセスするたびに、そのモジュールや操作に対する権限がユーザーにあるかどうかを即座に検証し、システムのセキュリティをより高いレベルで確保するモードです。
Identity Manager の実行
Identity Manager の実行の有用性は、ほとんどのアプリケーション システムでは制限されています。たとえば、特定の操作とモジュールには複数の ID のセキュリティ要件が必要であり、現在の ID を別の ID に置き換えることができます。アプリケーション システムの奥深くにある保護されたオブジェクトにアクセスします。このセキュリティ システム層は現在 RBAC に実装されていません。
ThinkPHP の RBAC 認証プロセス
上記のセキュリティ システムに対応して、ThinkPHP の RBAC 認証プロセスは大まかに次のとおりです:
現在のモジュールの現在の操作に認証が必要かどうかを確認します
認証が必要で認証が必要でない場合ログイン済みの場合は、認証ゲートウェイにジャンプして5
委任認証によるユーザーID認証
ユーザーの意思決定アクセスリストを取得
現在のユーザーにアクセス権限があるかどうかを判断する
具体的な実装プロセス権限管理の詳細
RBAC 関連データベースの紹介
RBAC 処理クラス RBAC.class.php ファイルを含む ThinkPHP パッケージで完了し、Extend/Library/ORG/Util にあります。 RBAC を使用するために必要な 4 つのテーブルを含むファイルを開きます。SQL ステートメントは次のとおりです (コピー後にテーブルの接頭辞を置き換えてください):
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;
ここで、ソース コード リソースをダウンロードすることもお勧めします: http :/ /www.php.cn/xiazai/learn/2134
資料
ドキュメント
ソースコード
イラスト
テンプレート
以上が大規模ショッピング モール プロジェクトの ThinkPHP 開発に関する実践的なビデオのソース コード コースウェアの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。