Laravel에서는 페이지 요소의 권한 기반 표시 및 숨기기를 구현하는 것이 일반적인 요구 사항입니다. 이 기사에서는 페이지 요소를 동적으로 렌더링하는 기능을 구현하기 위해 Laravel의 권한 관리 라이브러리 "spatie/laravel-permission"을 사용하는 방법을 소개합니다. 동시에 문제를 더 잘 설명하기 위해 이 기사에서는 간단한 예제 프로그램을 작성하겠습니다.
1. laravel-permission 설치
먼저 Laravel 프로젝트에 "spatie/laravel-permission" 작곡가 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치합니다.
composer require spatie/laravel-permission
설치 후 마이그레이션을 실행하여 관련 권한 관리 테이블을 생성해야 합니다.
php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider" --tag="migrations" php artisan migrate
2. 역할 및 권한 정의
이 예에서는 "Management"라는 두 가지 역할을 정의합니다. " "관리자"와 "일반 사용자"를 선택하고 관리자에게 모든 데이터를 볼 수 있는 권한을 부여하세요.
먼저 config/auth.php 파일에 역할 및 권한 모델 구성을 추가해야 합니다:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppModelsUser::class, ], 'roles' => [ 'driver' => 'eloquent', 'model' => SpatiePermissionModelsRole::class, ], 'permissions' => [ 'driver' => 'eloquent', 'model' => SpatiePermissionModelsPermission::class, ], ],
그런 다음 사용자 모델에 역할 및 권한과의 연결을 추가합니다:
namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateFoundationAuthUser as Authenticatable; use SpatiePermissionTraitsHasRoles; class User extends Authenticatable { use HasFactory, HasRoles; //... }
그런 다음 Seeder의 역할 및 권한:
use IlluminateDatabaseSeeder; use SpatiePermissionModelsPermission; use SpatiePermissionModelsRole; class RolesAndPermissionsSeeder extends Seeder { public function run() { //创建角色 Role::create(['name' => 'admin']); Role::create(['name' => 'user']); //创建权限 Permission::create(['name' => 'view_all_data']); //管理员拥有所有权限 Role::findByName('admin')->givePermissionTo(Permission::all()); } }
3. 권한 부여 및 인증
다음으로 컨트롤러의 Authorize() 메서드를 사용하여 사용자에게 특정 권한이 있는지 확인합니다. 예를 들어, 다음 인덱스 메소드에는 "view_all_data" 권한이 필요합니다.
public function index() { $this->authorize('view_all_data'); //... }
또한 뷰에서 can() 메소드를 사용하여 현재 사용자에게 특정 권한이 있는지 확인할 수 있습니다. 예를 들어, 다음 코드에서 "모든 데이터 보기" 버튼은 사용자에게 "view_all_data" 권한이 있는 경우에만 표시됩니다.
@if(auth()->user()->can('view_all_data')) <button>查看所有数据</button> @endif
더 세밀하게 제어하려면 role() 메소드를 사용하여 사용자에게 특정 역할이 있는지 확인합니다. 예를 들어, 다음 코드에서 "관리자 메뉴"는 사용자에게 "관리자" 역할이 있는 경우에만 표시됩니다.
@if(auth()->user()->hasRole('admin')) <menu>管理员菜单</menu> @endif
4. 페이지 요소의 동적 렌더링
때로는 페이지의 일부 요소를 기반으로 해야 하는 경우도 있습니다. 현재 사용자의 역할 또는 권한에 따라 동적으로 렌더링됩니다. 예를 들어 관리자만 "삭제" 버튼을 볼 수 있도록 설정할 수 있습니다.
@if(auth()->user()->can('delete_data')) <button>删除</button> @endif
그러나 권한에 따라 동적으로 렌더링해야 하는 요소가 여러 개 있는 경우 각 요소를 개별적으로 판단해야 하며 이는 코드로 이어집니다. 중복 및 유지 관리 비용 증가. 이때 이 기능을 블레이드 명령으로 캡슐화하고 권한 이름을 매개변수로 허용할 수 있습니다.
Blade::directive('can', function ($expression) { return "<?php if(auth()->user()->can({$expression})): ?>"; }); Blade::directive('endcan', function () { return "<?php endif; ?>"; });
이 명령을 사용하면 다음과 같은 방식으로 페이지 요소를 동적으로 렌더링할 수 있습니다.
@can('delete_data') <button>删除</button> @endcan
이러한 방식으로 코드가 더욱 간결해지고 명확해집니다.
Summary
Laravel의 권한 관리 라이브러리 "spatie/laravel-permission"을 사용하여 페이지 요소의 권한 기반 표시 및 숨기기를 쉽게 구현할 수 있습니다. 동시에 동적으로 렌더링된 코드를 블레이드 명령어로 캡슐화하면 코드를 더욱 단순화하고 코드의 가독성과 유지 관리성을 향상시킬 수 있습니다.
위 내용은 Laravel에서 페이지 요소의 권한 기반 표시 및 숨기기를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!