웹사이트와 애플리케이션의 기능이 점점 더 복잡해짐에 따라 권한 관리가 중요해졌습니다. 사용자가 인증을 통해 로그인하면 권한이 있는 페이지와 기능에 액세스할 수 있지만 권한이 없는 페이지와 기능에는 액세스할 수 없기를 원합니다. 이 글에서는 사용자가 볼 수 있는 내용을 쉽게 제어할 수 있도록 Laravel에서 권한 기반 탐색 메뉴를 구현하는 방법을 설명합니다.
Laravel에 이미 익숙하다면 이 단계를 건너뛸 수 있습니다. 그렇지 않은 경우 다음 단계에 따라 Laravel을 설치하세요.
Laravel 설치: 터미널을 열고 Composer를 사용하여 Laravel을 설치합니다.
composer global require laravel/installer
데이터베이스 구성: .env 파일에서 데이터베이스 연결 매개변수를 설정합니다.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_username DB_PASSWORD=your_password
마이그레이션 실행: 데이터베이스 마이그레이션을 실행하여 필요한 테이블을 생성합니다.
php artisan migrate
이 예에서는 DashboardController라는 컨트롤러를 만들고 이에 대한 세 가지 경로(/dashboard, /users, /roles)를 정의합니다. 컨트롤러 생성자에 필요한 권한 검사를 추가할 수 있습니다.
<?php namespace AppHttpControllers; use IlluminateHttpRequest; class DashboardController extends Controller { public function __construct() { $this->middleware(['auth', 'permissions']); // 添加授权中间件 } public function index() { return view('dashboard'); } public function users() { return view('users'); } public function roles() { return view('roles'); } }
다음으로 권한 규칙을 정의해야 합니다. 필요한 모든 권한을 정의하는Permissions.php라는 파일을 만듭니다. 비즈니스 요구에 따라 더 많은 권한 규칙을 수정하거나 추가할 수 있습니다.
return [ 'admin' => [ 'dashboard' => true, 'users' => true, 'roles' => true, ], 'editor' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], 'user' => [ 'dashboard' => true, 'users' => false, 'roles' => false, ], ];
사용자의 권한을 확인하려면 미들웨어를 생성해야 합니다. /app/Http/Middleware 디렉터리에 CheckPermissions라는 미들웨어를 만듭니다.
<?php namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; class CheckPermissions { public function handle($request, Closure $next) { $user = Auth::user(); $routeName = $request->route()->getName(); if (!$user->hasPermission($routeName)) { abort(403); } return $next($request); } }
보시다시피 미들웨어는 요청에서 경로 이름을 가져오고 Auth::user() 메서드를 사용하여 사용자에게 경로에 액세스할 수 있는 권한이 있는지 확인합니다. 권한이 없으면 403 Forbidden 상태가 반환됩니다.
그런 다음 미들웨어를 애플리케이션에 등록해야 합니다. /app/Http/Kernel.php 파일을 열고 $middlewareGroups 배열을 찾으세요. 웹 배열에 권한이라는 미들웨어를 추가합니다.
protected $middlewareGroups = [ 'web' => [ // ... AppHttpMiddlewareCheckPermissions::class, ], // ... ];
보기 파일에 탐색 메뉴를 만들 때 사용자에게 각 링크에 대한 액세스 권한이 있는지 확인해야 합니다. Auth::user() 메소드를 사용하여 현재 사용자에게 기능에 대한 특정 권한이 있는지 확인하십시오.
<nav> <ul> <li><a href="{{ route('dashboard') }}" @if (!Auth::user()->hasPermission('dashboard'))disabled@endif>Dashboard</a></li> <li><a href="{{ route('users') }}" @if (!Auth::user()->hasPermission('users'))disabled@endif>Users</a></li> <li><a href="{{ route('roles') }}" @if (!Auth::user()->hasPermission('roles'))disabled@endif>Roles</a></li> </ul> </nav>
사용자 모델에서는 hasPermission()이라는 메서드를 정의합니다. 이 메서드는 경로 이름을 수락한 다음 사용자가 해당 경로에 액세스할 수 있는지 확인합니다.
public function hasPermission($routeName) { $role = $this->role; $permissions = config('permissions.' . $role); return isset($permissions[$routeName]) && $permissions[$routeName]; }
우리는 config() 함수를 사용하여 권한 규칙을 읽고 사용자에게 해당 경로에 대한 액세스 권한이 있는지 확인합니다. 또한 사용자 모델의 역할 속성을 사용하여 사용자의 역할을 가져옵니다.
이제 우리는 사용자가 금지된 페이지에 액세스할 때 링크를 자동으로 비활성화하는 권한 기반 탐색 메뉴를 성공적으로 만들었습니다. 이 글이 Laravel을 사용하여 권한 기반 탐색 메뉴를 구현하는 방법을 익히는 데 도움이 되기를 바랍니다.
위 내용은 Laravel에서 권한 기반 탐색 메뉴를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!