이번에는 SPATIE의 Laravel Permission이라는 것을 설치해 보겠다.
최근에 계속 뭔가를 업그레이드 하거나 설치하는 글만 자주 올리고 있는데, 아마도 이번이 (당분간은) 마지막일 거다.
이전 포스트
Laravel 프로젝트에 filament 설치
SPATIE Laravel Permission이란?
SPATIE Laravel Permission은 라라벨 애플리케이션에서 사용자의 역할(Role)과 권한(Permission)을 효율적이고 안전하게 관리할 수 있도록 도와주는 대표적인 오픈소스 패키지다
웹 서비스가 성장하면 '일반 회원', '게시글 작성자', '운영자', '최고 관리자'처럼 사용자마다 접근할 수 있는 기능이나 페이지를 다르게 제한해야 하는 상황이 생긴다.
이 패키지는 이러한 권한 제어 로직을 데이터베이스(DB)와 연동하여 아주 손쉽게 구현할 수 있도록 만들어졌다.
SPATIE 웹사이트의 첫 화면이다.
여기서 Laravel Permission이 있는 페이지로 가는 링크를 아래에 걸어두겠다.
Installation in Laravel | laravel-permission | Spatie
SPATIE Laravel Permission 설치
make app #컨테이너 안으로 들어간다.
composer require spatie/laravel-permission
ubuntu 혹은 VSCode의 터미널에서 이 명령어들을 실행한다.
보통은 문제가 없이 잘 설치되겠지만, 이런 노란 바탕의 경고 메시지가 뜰 수도 있다.
라라벨 성능 최적화를 위한 Laravel Debugbar 설치 및 다크모드 설정하기
이전에 Laravel Debugbar를 설치하는 과정에서도 같은 일이 있었다.
이번에도 해결하고 넘어가 보자.
메시지는 "프로젝트에 설치된 패키지들 중 2개에서 총 6개의 보안 취약점(Security Vulnerability)이 발견되었다"는 알림이다.
메시지가 안내하는 composer audit 명령어를 실행했더니, 뭔가 길게 출력됐다. (캡처 이미지는 생략)
출력된 내용을 보니 guzzlehttp/guzzle과 guzzlehttp/psr7 두 패키지의 구버전에서 리다이렉트 헤더 유출, 쿠키 보안, URI 검증 관련 취약점이 발견되었다고 나왔다.
composer update
터미널에서 컨테이너 안에 들어가 있는 상태 그대로 이 명령어를 실행하면 된다.
그다음에 다시 composer audit을 실행하면 더 이상 경고 메시지가 나오지 않는다.
make bash #컨테이너 안으로 들어간다.
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
exit로 터미널에서 컨테이너 밖으로 한번 나온 후에 이 명령어들을 차례대로 실행한다.
이 명령어는 Spatie\Permission 패키지의 마이그레이션 파일과 설정 파일(permission.php)을 내 프로젝트 안으로 가져와 직접 수정할 수 있도록 복사해 주는 명령어다.
php artisan optimize:clear
php artisan migrate
이어서 이 명령어들도 차례대로 실행한다.
이것으로 캐시가 삭제되고, 마이그레이션을 실행하면서 DB에서 이 패키지에 대한 테이블이 만들어진다.
User 모델(User.php) 수정
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles; // 추가
class User extends Authenticatable
{
use HasRoles; // 추가
// 생략
}
// 추가라고 주석을 달아놓은 코드들을 추가한다.
아마 use HasFactory, Notifiable;이라는 코드가 이미 있을 거다.
거기에 HasRoles를 추가해서 use HasFactory, Notifiable, HasRoles;라고 해놓으면 된다.
설치된 SPATIE Laravel Permission의 버전 확인
make app #컨테이너 안으로 들어간다.
composer show spatie/laravel-permission
다시 make app 명령어로 컨테이너 안으로 들어가서 위의 명령어를 실행하면 설치된 SPATIE Laravel Permission의 버전을 확인할 수가 있다.
Permission Denied 에러 해결 및 생성 파일 권한 자동 설정하기
아까부터 자꾸 make app과 make bash 명령어를 번갈아가며 쓰면서 컨테이너 안으로 들어갔는데, 어떤 차이가 있는지는 이 포스트를 확인하자.
여기까지 하면 이제 SPATIE의 Laravel Permission도 사용할 준비가 완료된다.
이제 데이터베이스 Seeder를 활용해 최고 관리자(Admin)나 일반 사용자 같은 역할을 생성하고, 앞서 설치했던 filament 관리자 패널에 접근 권한을 매핑하는 일만 남았다.

0 Comments
댓글 쓰기
🔸 댓글은 블로그 운영자의 승인 후에 블로그에 표시됩니다.
🔸 비로그인 방문자 분께서는 '익명'보다 이름/URL로 댓글을 남겨주시면 감사하겠습니다. (URL은 생략 가능합니다.)
🔸 구글 로그인 방문자는 '알림 사용'에 체크를 하시면, 남겨주신 댓글에 대한 답글 알림을 메일로 받아볼 수 있습니다. 📩