>PHP 프레임워크 >Laravel >Laravel에서 페이지 요소의 권한 기반 표시 및 숨기기를 구현하는 방법

Laravel에서 페이지 요소의 권한 기반 표시 및 숨기기를 구현하는 방법

王林
王林원래의
2023-11-03 08:35:19822검색

Laravel에서 페이지 요소의 권한 기반 표시 및 숨기기를 구현하는 방법

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.