Gates를 사용하여 Laravel 8에서 간단한 역할 기반 권한 부여 구현하기
이 자습서에서는 단일 역할 기반 시스템을 설정하지만 동일한 시스템을 다중 역할 기반 시스템으로 확장할 수 있습니다. 마찬가지로 데이터베이스 대신 배열에서 역할과 권한을 가져올 것입니다. 게이트를 사용하여 권한 부여를 구현합니다.
나는 미래에 같은 것의 더 발전된 버전을 다룰 계획이지만, 개념을 단순화하고 요점으로 이해하면 훨씬 더 쉽게 이해할 수 있다고 생각합니다. 이 기사를 읽기 전에 Laravel 8 인증 문서를 한 번 살펴보는 것이 좋습니다.
데모를 위해 약간 수정된 my GitHub repo 에서 모든 소스를 볼 수 있습니다.
우리의 응용 프로그램에 대해
설명을 위해 관리자, 관리자 및 고객의 3가지 역할을 가진 응용 프로그램을 만들겠습니다. 그리고 우리의 권한은 생성, 업데이트, 보기, 삭제와 같은 제품을 기반으로 합니다. 관리자 및 관리자는 모든 권한을 가지고 있지만 고객은 볼 수만 있어야 합니다.
시작하기
일단 Laravel을 설치하고 설정했습니다. PHP artisan ui bootstrap --auth
명령 다음에 npm install
& npm run dev
를 사용하여 인증을 스캐폴드합니다.
익숙한 다른 인증 스캐폴딩으로 그렇게 하고 그에 따라 조정할 수 있습니다.
마이그레이션에 역할 추가
create_users_table_table
에서 database/migrations
마이그레이션 파일을 엽니다.
스캐폴딩된 스키마를 수정하고 문자열을 저장하고 기본값으로 '고객'을 갖는 역할 열을 설정합니다.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('role')->default('customer');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
인증 메커니즘 설정
내부AuthServiceProvider
열기app/Providers
. 클래스에 권한 배열을 추가해 보겠습니다.
public static $permissions = [
'index-product' => ['manager', 'customer'],
'show-product' => ['manager', 'customer'],
'create-product' => ['manager'],
'store-product' => ['manager'],
'edit-product' => ['manager'],
'update-product' => ['manager'],
'destroy-product' => ['manager'],
];
무슨 일이야? 이것은 $action => $roles[]
형식의 배열입니다.
게이트 설정
로직으로 boot() 함수를 수정합니다.
public function boot()
{
$this->registerPolicies();
// Roles based authorization
Gate::before(
function ($user, $ability) {
if ($user->role === 'admin') {
return true;
}
}
);
foreach (self::$permissions as $action=> $roles) {
Gate::define(
$action,
function (User $user) use ($roles) {
if (in_array($user->role, $roles)) {
return true;
}
}
);
}
}
여기에서 Gates:before()
를 사용하여 사용자 역할이 admin인 경우 true
를 반환하여 모든 기능에 대한 관리자 액세스를 허용합니다.
다음으로 권한 배열을 반복하고 각각에 대한 게이트를 정의합니다. 여기서 사용자의 역할이 작업과 관련된 역할에 있는지 확인합니다.
기본적으로 권한 배열을 게이트에 매핑했습니다.
인증 시스템 사용
모든 것이 설정되었으므로 이제 시스템을 사용할 수 있습니다.
컨트롤러에서
authorize()
방법을 사용하여.
$this->authorize('update-product');
우리 모델에서
can()
방법을 사용하여.
$this->can('update-product');
우리 보기에서
@can
블레이드 지시 방법을 사용합니다.
@can('update-product')
//
@endcan
모델을 통해
can()
방법을 사용하여.
if ($user->can('update-product')) {
//
}
미들웨어를 통해
can:action-name
미들웨어를 사용하여.
Route::put('/product/{Product}', [PostController::class, 'update'])->middleware('can:update-post');
그게 다야
이 기사는 권한 부여 시스템을 만드는 방법에 대한 일반적인 아이디어를 제공해야 합니다. 이것은 기본이지만 필요한 기능을 지원하기 위해 구현을 추가하고 개선할 수 있습니다.
읽은 내용이 마음에 드셨나요? 여기에서 저를 지원하십시오: https://www.buymeacoffee.com/zaxwebs
Reference
이 문제에 관하여(Gates를 사용하여 Laravel 8에서 간단한 역할 기반 권한 부여 구현하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/zaxwebs/implementing-simple-role-based-authorization-in-laravel-8-using-gates-1n44
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
일단 Laravel을 설치하고 설정했습니다.
PHP artisan ui bootstrap --auth
명령 다음에 npm install
& npm run dev
를 사용하여 인증을 스캐폴드합니다.익숙한 다른 인증 스캐폴딩으로 그렇게 하고 그에 따라 조정할 수 있습니다.
마이그레이션에 역할 추가
create_users_table_table
에서 database/migrations
마이그레이션 파일을 엽니다.
스캐폴딩된 스키마를 수정하고 문자열을 저장하고 기본값으로 '고객'을 갖는 역할 열을 설정합니다.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('role')->default('customer');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
인증 메커니즘 설정
내부AuthServiceProvider
열기app/Providers
. 클래스에 권한 배열을 추가해 보겠습니다.
public static $permissions = [
'index-product' => ['manager', 'customer'],
'show-product' => ['manager', 'customer'],
'create-product' => ['manager'],
'store-product' => ['manager'],
'edit-product' => ['manager'],
'update-product' => ['manager'],
'destroy-product' => ['manager'],
];
무슨 일이야? 이것은 $action => $roles[]
형식의 배열입니다.
게이트 설정
로직으로 boot() 함수를 수정합니다.
public function boot()
{
$this->registerPolicies();
// Roles based authorization
Gate::before(
function ($user, $ability) {
if ($user->role === 'admin') {
return true;
}
}
);
foreach (self::$permissions as $action=> $roles) {
Gate::define(
$action,
function (User $user) use ($roles) {
if (in_array($user->role, $roles)) {
return true;
}
}
);
}
}
여기에서 Gates:before()
를 사용하여 사용자 역할이 admin인 경우 true
를 반환하여 모든 기능에 대한 관리자 액세스를 허용합니다.
다음으로 권한 배열을 반복하고 각각에 대한 게이트를 정의합니다. 여기서 사용자의 역할이 작업과 관련된 역할에 있는지 확인합니다.
기본적으로 권한 배열을 게이트에 매핑했습니다.
인증 시스템 사용
모든 것이 설정되었으므로 이제 시스템을 사용할 수 있습니다.
컨트롤러에서
authorize()
방법을 사용하여.
$this->authorize('update-product');
우리 모델에서
can()
방법을 사용하여.
$this->can('update-product');
우리 보기에서
@can
블레이드 지시 방법을 사용합니다.
@can('update-product')
//
@endcan
모델을 통해
can()
방법을 사용하여.
if ($user->can('update-product')) {
//
}
미들웨어를 통해
can:action-name
미들웨어를 사용하여.
Route::put('/product/{Product}', [PostController::class, 'update'])->middleware('can:update-post');
그게 다야
이 기사는 권한 부여 시스템을 만드는 방법에 대한 일반적인 아이디어를 제공해야 합니다. 이것은 기본이지만 필요한 기능을 지원하기 위해 구현을 추가하고 개선할 수 있습니다.
읽은 내용이 마음에 드셨나요? 여기에서 저를 지원하십시오: https://www.buymeacoffee.com/zaxwebs
Reference
이 문제에 관하여(Gates를 사용하여 Laravel 8에서 간단한 역할 기반 권한 부여 구현하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/zaxwebs/implementing-simple-role-based-authorization-in-laravel-8-using-gates-1n44
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('role')->default('customer');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
내부
AuthServiceProvider
열기app/Providers
. 클래스에 권한 배열을 추가해 보겠습니다.public static $permissions = [
'index-product' => ['manager', 'customer'],
'show-product' => ['manager', 'customer'],
'create-product' => ['manager'],
'store-product' => ['manager'],
'edit-product' => ['manager'],
'update-product' => ['manager'],
'destroy-product' => ['manager'],
];
무슨 일이야? 이것은
$action => $roles[]
형식의 배열입니다.게이트 설정
로직으로 boot() 함수를 수정합니다.
public function boot()
{
$this->registerPolicies();
// Roles based authorization
Gate::before(
function ($user, $ability) {
if ($user->role === 'admin') {
return true;
}
}
);
foreach (self::$permissions as $action=> $roles) {
Gate::define(
$action,
function (User $user) use ($roles) {
if (in_array($user->role, $roles)) {
return true;
}
}
);
}
}
여기에서
Gates:before()
를 사용하여 사용자 역할이 admin인 경우 true
를 반환하여 모든 기능에 대한 관리자 액세스를 허용합니다.다음으로 권한 배열을 반복하고 각각에 대한 게이트를 정의합니다. 여기서 사용자의 역할이 작업과 관련된 역할에 있는지 확인합니다.
기본적으로 권한 배열을 게이트에 매핑했습니다.
인증 시스템 사용
모든 것이 설정되었으므로 이제 시스템을 사용할 수 있습니다.
컨트롤러에서
authorize()
방법을 사용하여.
$this->authorize('update-product');
우리 모델에서
can()
방법을 사용하여.
$this->can('update-product');
우리 보기에서
@can
블레이드 지시 방법을 사용합니다.
@can('update-product')
//
@endcan
모델을 통해
can()
방법을 사용하여.
if ($user->can('update-product')) {
//
}
미들웨어를 통해
can:action-name
미들웨어를 사용하여.
Route::put('/product/{Product}', [PostController::class, 'update'])->middleware('can:update-post');
그게 다야
이 기사는 권한 부여 시스템을 만드는 방법에 대한 일반적인 아이디어를 제공해야 합니다. 이것은 기본이지만 필요한 기능을 지원하기 위해 구현을 추가하고 개선할 수 있습니다.
읽은 내용이 마음에 드셨나요? 여기에서 저를 지원하십시오: https://www.buymeacoffee.com/zaxwebs
Reference
이 문제에 관하여(Gates를 사용하여 Laravel 8에서 간단한 역할 기반 권한 부여 구현하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/zaxwebs/implementing-simple-role-based-authorization-in-laravel-8-using-gates-1n44
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$this->authorize('update-product');
$this->can('update-product');
@can('update-product')
//
@endcan
if ($user->can('update-product')) {
//
}
Route::put('/product/{Product}', [PostController::class, 'update'])->middleware('can:update-post');
이 기사는 권한 부여 시스템을 만드는 방법에 대한 일반적인 아이디어를 제공해야 합니다. 이것은 기본이지만 필요한 기능을 지원하기 위해 구현을 추가하고 개선할 수 있습니다.
읽은 내용이 마음에 드셨나요? 여기에서 저를 지원하십시오: https://www.buymeacoffee.com/zaxwebs
Reference
이 문제에 관하여(Gates를 사용하여 Laravel 8에서 간단한 역할 기반 권한 부여 구현하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zaxwebs/implementing-simple-role-based-authorization-in-laravel-8-using-gates-1n44텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)