Laravel は、権限管理などの一般的な問題を実装するための便利なツールを提供する、広く使用されている PHP フレームワークです。多くのアプリケーションでは、ユーザーがアクセスする必要があるものだけにアクセスできるようにするために、ユーザーの権限をきめ細かく制御する必要があります。この記事では、Laravel で権限を自動的に割り当てたり取り消したりする方法について説明します。同時に、具体的なコード例も紹介します。
1. Laravel でポリモーフィック アソシエーションを使用して、パーミッションの自動割り当てとリサイクルを実現します。
Laravel の Eloquent ORM は、ポリモーフィック アソシエーションの機能を提供します。つまり、同じモデルに関連付けられた複数の異なるモデルを組み合わせることができます。データのセット。これは、アクセス許可の自動割り当てとリサイクルに非常に役立ちます。
たとえば、アプリケーション内の「記事」と「コメント」に対するアクセス許可を制御し、ユーザーにロールを割り当てる必要があるとします。次の 4 つのモデルを作成できます。
- User (ユーザー)
- Article (記事)
- Comment (コメント)
- Role (ロール) ) )
次に、多態性関連付け関数を使用して、3 つのモデルをロールに関連付けます。
class User extends Model { public function roles() { return $this->morphToMany(Role::class, 'model', 'model_has_roles'); } } class Article extends Model { public function roles() { return $this->morphToMany(Role::class, 'model', 'model_has_roles'); } } class Comment extends Model { public function roles() { return $this->morphToMany(Role::class, 'model', 'model_has_roles'); } }
この例では、Laravel の多態性関連付け関数を使用するため、ロールを定義できます。 3 つのモデルの関係とその記録。次のステップは、これらの関係を保持する中間テーブルを作成することです。
class CreateModelHasRolesTable extends Migration { public function up() { Schema::create('model_has_roles', function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->unsignedBigInteger('model_id'); $table->string('model_type'); $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); $table->primary(['role_id', 'model_id', 'model_type']); }); } }
これで、上記のモデルを対応するロールに関連付けることができます。たとえば、投稿の作成者に「作成者」の役割を割り当てたと仮定すると、次のようになります:
$article->roles()->syncWithoutDetaching([ Role::where('name', 'author')->first()->id ]);
同様に、新しいコメントを作成し、そのコメントの作成者に「コメント作成者」の役割を割り当てます。これは次のように実装できます。
$comment = new Comment(); $comment->content = 'This is a new comment.'; $comment->user_id = Auth::user()->id; $comment->save(); $comment->roles()->syncWithoutDetaching([ Role::where('name', 'commenter')->first()->id ]);
このようなコードを使用すると、ロールを使用して誰がどのアクションを実行できるかを制御できます。ここで、新しいユーザーとその投稿やコメントに適切なロールを自動的に割り当て、それらのレコードが削除されたときにロールの割り当てを自動的に削除する方法が必要です。
2. Laravel でイベント リスナーを使用して、パーミッションの自動割り当てとリサイクルを実現します。
パーミッションの自動割り当てとリサイクルを実現するために、Laravel イベント システムのイベント リスナーを使用して、興味のある感情の出来事。イベントリスナーとは、アプリケーション固有のイベント応答関数を登録する機構であり、この機構によりアプリケーション内のさまざまなイベントに非常に柔軟に応答することができます。
たとえば、Laravel には、ユーザーの作成時および削除時に自動的にトリガーされる UserCreating イベントと UserDeleting イベントが用意されています。イベント リスナーを作成して、ユーザーの作成時に必要なロール関係を作成し、削除時にこの関係を削除できます。
まず、新しいイベント リスナーを定義する必要があります。
class UserEventListener { public function onUserCreating(UserCreating $event) { $user = $event->user; $roles = Role::where('name', 'user')->get(); foreach ($roles as $role) { $user->roles()->create([ 'role_id' => $role->id, ]); } } public function onUserDeleting(UserDeleting $event) { $user = $event->user; $user->roles()->detach(); } }
このイベント リスナーは 2 つのメソッドを定義します。 1 つのメソッド (onUserCreating) は、ユーザーの作成時に自動的にトリガーされ、ユーザーに「ユーザー」ロールを割り当てます。ユーザーがそのロールに関連するすべてのレコードを削除すると、別のメソッド (onUserDeleting) が自動的に起動します。
次に、これらのイベント リスナーをアプリケーション サービス プロバイダーに登録する必要があります。
class AppServiceProvider extends ServiceProvider { protected $listen = [ UserCreating::class => [ UserEventListener::class, ], UserDeleting::class => [ UserEventListener::class, ], ]; public function boot() { // } }
これで、ユーザーを作成または削除すると、適切なアクションが自動的に実行されます。ロールをインストールする最後のステップは、投稿とコメントに対して同様のイベント リスナーを定義することです。
class ArticleEventListener { public function onArticleCreating(ArticleCreating $event) { $article = $event->article; $roles = Role::where('name', 'author')->get(); foreach ($roles as $role) { $article->roles()->create([ 'role_id' => $role->id, ]); } } public function onArticleDeleting(ArticleDeleting $event) { $article = $event->article; $article->roles()->detach(); } } class CommentEventListener { public function onCommentCreating(CommentCreating $event) { $comment = $event->comment; $roles = Role::where('name', 'commenter')->get(); foreach ($roles as $role) { $comment->roles()->create([ 'role_id' => $role->id, ]); } } public function onCommentDeleting(CommentDeleting $event) { $comment = $event->comment; $comment->roles()->detach(); } }
これらのリスナーをサービス プロバイダーの対応するイベントとして登録する必要もあります。
class AppServiceProvider extends ServiceProvider { protected $listen = [ UserCreating::class => [ UserEventListener::class, ], UserDeleting::class => [ UserEventListener::class, ], ArticleCreating::class => [ ArticleEventListener::class, ], ArticleDeleting::class => [ ArticleEventListener::class, ], CommentCreating::class => [ CommentEventListener::class, ], CommentDeleting::class => [ CommentEventListener::class, ], ]; public function boot() { // } }
これで、アクセス許可の自動割り当てとリサイクルを実装するためのすべての手順が完了しました。この後、ユーザー、記事、コメントを作成すると、対応するロールが自動的に割り当てられます。これらのレコードが削除されると、関連付けられたロールから自動的に削除されます。
概要:
この記事では、Laravel で権限を自動的に割り当てて再利用する方法を紹介しました。ポリモーフィック関連付け機能とイベント リスナーを使用して、ユーザー、ロール、投稿、コメントを関連付け、自動的にロールを割り当ててリサイクルしました。同時に、Laravel で権限管理を実装する方法をより深く理解するのに役立つ詳細なコード例も提供します。
以上がLaravelでパーミッションの自動割り当てとリサイクルを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

分散したチームメンバーがツールやリソースに公正にアクセスできるようにする方法には、次のものが含まれます。1)接続の問題を解決するために、非同期ビデオやテキストの更新などの低帯域幅の代替品を使用します。 2)コアの重複労働時間を設定し、タイムゾーンの違いを管理するための柔軟な労働時間を提供する。 3)翻訳機能と文化的啓発トレーニングを通じて、さまざまな文化的ニーズに適応します。これらの戦略は、包括的で効率的なリモート作業環境の作成に役立ちます。

forenhancingRemoteCollaboration、anintantmessagingToolMusthave:1)信頼性のforconsistmessagedelivery、2)Anintuitiveuserfaceforeasynavigation、3)real-timeNotificationStayUpdated、4)SeamlessefileSharing forefficientDocumentexchange、5)統合

ManagingDistributedTeamSiscommunication.toAddressthis、Usetoolslikeslack、Zoom、andgithub; setClearExpectations; fostertrustandautonomy; emplional asynchronousworkpatterns; and integreatetaskManagementionwithCommunicationPlatfortfortforfoltivedive

Laravelの最新バージョンは、以下を含むセキュリティを大幅に改善しました。1。CSRF保護の強化は、より堅牢なトークン検証メカニズムを介して。 2。強化されたクエリ構築方法を通じて、SQL注入保護の改善。 3.ユーザーデータセキュリティを確保するためのセッション暗号化の改善。 4。認証システムの改善、より細かい粒状ユーザー認証と多要素認証(MFA)をサポートします。

ConchedulingConflictsinaglobalworkforce、usetechnology、共感、および戦略的計画:1)1)雇用を採用しています

Laravelフルスタック開発では、APIとフロントエンドロジックを管理するための効果的な方法には次のものがあります。1)RESTFULコントローラーの使用とリソースルーティング管理API。 2)ブレードテンプレートとvue.jsまたはReactを介したフロントエンドロジックの処理。 3)APIバージョン化とページングを通じてパフォーマンスの最適化。 4)保守性とスケーラビリティを確保するために、バックエンドとフロントエンドのロジックの分離を維持します。

totackleculturalintricaciesindistributedteams、fosteranenvironmentebreatingdifferences、vemindfulofcommunication、およびusetoolsforclarity.1)CulturalExchangesSsionsistoriesSionsandtraditions.2)CommunicationMethodStosuitCultulpreference

COMSESTESTESTESTESTESTESTESTESTESTESTESTESTEREMOTECommunication、Focuson:1)EngagementMetricsLikeMessageFRequenceAndResponsetime、2)SentimentAnalysistogaugeMotionaltone、3)Meating fisondentivencivitionSanceAndAnceAndActionItems、and4)netarysistoundErtindErtindESTANDSTANDCOMMUNICATIONPA


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









