목차
우선 GitHub 주소를 올려보겠습니다
그럼 사용 경험을 이야기해보겠습니다
각 관계를 시각적으로 볼 수 있도록 아래 그림이 제공됩니다.
으로 이동합니다.
역할 추가 방법(종속성 패키지에서 메서드 제공)
권한 추가 방법(종속 패키지도 메소드 제공)
사용자에게 권한을 직접 추가하는 방법, 권한을 삭제하는 방법, 권한이 있는지 확인하는 방법
역할을 통해 권한을 사용하는 방법
제한할 곳과 사용할 곳
요약:
PHP 프레임워크 Laravel laravel-permission 역할 권한 제어 [상세 코드 설명]

laravel-permission 역할 권한 제어 [상세 코드 설명]

Jun 20, 2020 pm 01:33 PM

다음 튜토리얼 칼럼인 Laravel에서는 laravel-permission 역할 권한 제어에 대해 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

laravel-permission 역할 권한 제어 [상세 코드 설명]

우선 GitHub 주소를 올려보겠습니다

https://github.com/spatie/laravel-permission

그럼 사용 경험을 이야기해보겠습니다

먼저 이야기를 나눠보겠습니다 데이터베이스의 테이블 구조에 대해서는 6개의 테이블이 있으며 원하는 대로 테이블을 추가, 수정, 삭제할 수 있지만 여전히 테이블이 먼저 나열됩니다!

첫 번째는 사용자 테이블(사용자)입니다. 말할 필요도 없이 여기에는 이름, 이메일 주소 등을 포함한 몇 가지 기본 정보가 포함되어 있습니다!

권한 테이블(권한)은 모든 권한을 저장하는 테이블입니다. 권한은 컨트롤러 액세스 권한, 인터페이스 액세스 권한, 모델 액세스 권한일 수 있습니다.

캐릭터 테이블(역할) 역할 테이블에는 모든 캐릭터가 저장되며, 캐릭터 이름이 인덱스입니다!

이제 기본 테이블이 생겼으니, 그것들은 어떻게 관련되어 있나요? 계속 읽어주세요!

사용자는 권한 테이블(model_has_permissions)을 가지고 있습니다. 이 테이블에는 user_id와permission_id의 다대다 관계 테이블이 기록되어 있습니다.

사용자는 역할 테이블(model_has_roles)을 가지고 있습니다. 이 테이블에는 user_id와 role_id가 포함되어 있으며, 이는 사용자와 역할을 기록하는 다대다 관계 테이블이기도 합니다. 중간 테이블로!

역할에 권한이 있음 테이블(role_has_permissions) 이 테이블에는 역할이 가지고 있는 권한이 기록됩니다. 역할 ID, 권한 ID라는 두 가지 필드만 있습니다. 필요에 따라 확장도 가능해요!

각 관계를 시각적으로 볼 수 있도록 아래 그림이 제공됩니다.


사용자는 직접적으로 model_has_permissions라는 권한을 가지며, 사용자는 역할을 갖고, 그 다음에는 model_has_role이고 역할 테이블 role_has_permission

으로 이동합니다.

역할 추가 방법(종속성 패키지에서 메서드 제공)

$role = Role::Create(['name' => 'add_title']);
로그인 후 복사

Create에는 몇 개의 매개변수가 있나요? 다음 코드에 표시된 대로 원래 메서드에 name과guard_name이 있습니다

use Spatie\Permission\Models\Role;
public static function create(array $attributes = [])
{
    $attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');

    if (static::where('name', $attributes['name'])->where('guard_name', $attributes['guard_name'])->first()) {
        throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']);
    }

    if (isNotLumen() && app()::VERSION < &#39;5.4&#39;) {
        return parent::create($attributes);
    }

    return static::query()->create($attributes);
}
로그인 후 복사

원래 작업을 호출하는 대신 이 메서드를 사용할 수도 있습니다. 예를 들어 프로젝트 초기화와 함께 제공되는 시더에서는 작업을 호출합니다

namespace App\Containers\Authorization\Data\Seeders;
Apiato::call(&#39;Authorization@CreateRoleTask&#39;, [&#39;admin&#39;, &#39;Administrator&#39;, &#39;Administrator Role&#39;, 999,&#39;admin&#39;]);
로그인 후 복사

네임스페이스 주소를 따라가면 시더를 검색할 수 있습니다. 이 작업은 필요에 따라 작업을 수정할 수도 있습니다.

권한 추가 방법(종속 패키지도 메소드 제공)

$ permission  =  Permission :: create([ &#39; name &#39;  =>  &#39; edit articles &#39; ]);
로그인 후 복사

역할과 동일하게 작성된 Task와 생성 메소드도 찾을 수 있습니다! 여기서는 별로 할 말이 없습니다!

사용자에게 권한을 직접 추가하는 방법, 권한을 삭제하는 방법, 권한이 있는지 확인하는 방법

//可以授予任何用户权限:
$ user - > givePermissionTo(&#39; edit articles &#39;);

//你也可以一次给多个权限
$ user - > givePermissionTo( &#39; edit articles &#39;, &#39; delete articles &#39;);

//你也可以传递数组
$ user - > givePermissionTo([ &#39; edit articles &#39;, &#39; delete articles &#39; ]);
로그인 후 복사
//权限可以从用户撤销:
$ user - > revokePermissionTo(&#39; edit articles &#39;);
로그인 후 복사
//或者一次性撤消并添加新的权限:
$ user - > syncPermissions([ &#39; edit articles &#39;,&#39; delete articles &#39; ]);
로그인 후 복사
//您可以测试用户是否有权限:
$ user - > hasPermissionTo(&#39; edit articles &#39;);
로그인 후 복사
//测试用户有多个权限:
$ user - > hasAnyPermission([ &#39; edit articles &#39;,&#39; publish articles &#39;,&#39; unpublish articles &#39; ]);
로그인 후 복사
//您可以使用Laravel的默认can功能测试用户是否具有权限:
$ user - > can(&#39; edit articles &#39;);
로그인 후 복사

역할을 통해 권한을 사용하는 방법

//角色可以分配给任何用户:
$ user - > assignRole(&#39; writer &#39;);

//你也可以一次赋值多个角色
$ user - > assignRole( &#39; writer &#39;, &#39; admin &#39;);
로그인 후 복사
//或者作为一个数组
$ user - > assignRole([ &#39; writer &#39;, &#39; admin &#39; ]);
로그인 후 복사
//角色可以从用户中删除:
$ user - > removeRole(&#39; writer &#39;);
로그인 후 복사
//角色也可以同步:
//所有当前角色将被从用户中删除,而由传入的数组取代
$ user - > syncRoles([ &#39; writer &#39;, &#39; admin &#39; ]);
로그인 후 복사
//您可以确定用户是否具有某个角色:
$ user - > hasRole(&#39; writer &#39;);
로그인 후 복사
//您还可以确定用户是否有任何给定的角色列表:
$ user - > hasAnyRole(Role :: all());
로그인 후 복사
//您还可以确定用户是否具有所有给定的角色列表:
$ user - > hasAllRoles(Role :: all());
로그인 후 복사
//assignRole,hasRole,hasAnyRole,hasAllRoles 和removeRole函数可以接受一个字符串,
로그인 후 복사
//一个\Spatie\Permission\Models\Role对象或一个\Illuminate\Support\Collection对象。

//可以给角色一个许可:
$ role - > givePermissionTo(&#39; edit articles &#39;);
로그인 후 복사
//您可以确定角色是否具有某种权限:
$ role - > hasPermissionTo(&#39; edit articles &#39;);
로그인 후 복사
//权限可以从角色中被撤销:
$ role - > revokePermissionTo(&#39; edit articles &#39;);
로그인 후 복사
//该givePermissionTo和revokePermissionTo函数可以接受字符串或Spatie\Permission\Models\Permission对象。
//权限是从角色自动继承的。另外,个人权限也可以分配给用户。例如:
$ role  =  Role :: findByName(&#39; writer &#39;); 
$ role - > givePermissionTo(&#39; edit articles &#39;);
$ user - > assignRole(&#39; writer &#39;);
$ user - > givePermissionTo(&#39; delete articles &#39;);
로그인 후 복사
//在上面的例子中,角色被授予编辑文章的权限,并且该角色被分配给用户。现在,用户可以编辑文章并删除文章。
로그인 후 복사

제한할 곳과 사용할 곳

먼저 할 ​​수 있는 일은 이 사용자에게 이 권한이 있습니까? 작업에서 이를 감지합니다.

사용자가 인터페이스를 요청하면 시스템은 사용자에게 이 인터페이스를 전달할 권한과 역할이 있는지 확인합니다!

물론 이 요청은 인터페이스가 메소드를 호출할 때 주입되어야 합니다!

위치는 아래와 같습니다

//“删除文章”的权限是直接分配给用户的直接权限。
로그인 후 복사

요약:

Laravel에는 여러 역할 권한 제어 기능이 있지만 저는 이것을 선택했습니다. 누가 더 좋고 누가 더 나쁘기 때문이 아니라 laravel-permission을 검색하기 쉽습니다! 일반적으로 역할 권한은 역할 테이블과 권한 테이블로 구성되며, 그 다음에는 사용자, 역할, 권한 간의 관계 유지가 있습니다! 사실, 꼭 그 사람만의 방법을 사용할 필요는 없습니다!

기본 테이블 관계는 모두 다대다 관계입니다. 연결, 삭제 및 동기화를 사용하여 이들 간의 관계를 유지할 수 있습니다!

게임에 충분히 익숙해지면 그 사람의 관계표는 필요하지 않습니다. 이 10% 관계를 구현하려면 직접 작성하면 됩니다!

위 내용은 laravel-permission 역할 권한 제어 [상세 코드 설명]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel의 구성 요소를 사용하여 재사용 가능한 UI 요소를 만드는 방법은 무엇입니까? Laravel의 구성 요소를 사용하여 재사용 가능한 UI 요소를 만드는 방법은 무엇입니까? Mar 17, 2025 pm 02:47 PM

이 기사는 구성 요소를 사용하여 Laravel에서 재사용 가능한 UI 요소를 작성하고 사용자 정의하여 조직을위한 모범 사례를 제공하고 패키지 강화를 제안합니다.

Laravel에서 Custom Blade Directives를 어떻게 작성하고 사용합니까? Laravel에서 Custom Blade Directives를 어떻게 작성하고 사용합니까? Mar 17, 2025 pm 02:50 PM

이 기사는 Laravel에서 사용자 정의 블레이드 지시문을 만들고 사용하여 템플릿을 향상시키는 것에 대해 설명합니다. 지침 정의, 템플릿에서이를 사용하고 대규모 프로젝트에서 관리하고 개선 된 코드 재사용 성 및 R과 같은 이점을 강조합니다.

Laravel에서 사용자 정의 검증 규칙을 어떻게 작성하고 사용하려면? Laravel에서 사용자 정의 검증 규칙을 어떻게 작성하고 사용하려면? Mar 17, 2025 pm 02:38 PM

이 기사에서는 Laravel에서 사용자 정의 검증 규칙을 작성하고 사용하여이를 정의하고 구현하는 단계를 제공합니다. 재사용 성과 특이성과 같은 이점을 강조하고 Laravel의 검증 시스템을 확장하는 방법을 제공합니다.

Laravel의 Artisan 콘솔을 사용하여 일반적인 작업을 자동화하려면 어떻게합니까? Laravel의 Artisan 콘솔을 사용하여 일반적인 작업을 자동화하려면 어떻게합니까? Mar 17, 2025 pm 02:39 PM

Laravel의 Artisan Console은 코드 생성, 마이그레이션 실행 및 스케줄링과 같은 작업을 자동화합니다. 주요 명령에는 Make : Controller, Migrate 및 DB : SEED가 포함됩니다. 특정 요구에 대해 사용자 정의 명령을 작성할 수 있으며 워크 플로 효율 향상.

Laravel의 라우팅 기능을 사용하여 SEO 친화적 인 URL을 만드는 방법은 무엇입니까? Laravel의 라우팅 기능을 사용하여 SEO 친화적 인 URL을 만드는 방법은 무엇입니까? Mar 17, 2025 pm 02:43 PM

이 기사는 Laravel의 라우팅을 사용하여 SEO 친화적 인 URL을 생성, 모범 사례, 표준 URL 및 SEO 최적화 도구를 다루는 것에 대해 설명합니다.

어느 것이 더 낫습니까, 장고 또는 라벨? 어느 것이 더 낫습니까, 장고 또는 라벨? Mar 28, 2025 am 10:41 AM

Django와 Laravel은 모두 풀 스택 프레임 워크입니다. Django는 Python 개발자 및 복잡한 비즈니스 논리에 적합한 반면 Laravel은 PHP 개발자 및 우아한 구문에 적합합니다. 1. Django는 파이썬을 기반으로하며 빠른 개발 및 높은 동시성에 적합한 "배터리 완성"철학을 따릅니다. 2. Laravel은 PHP를 기반으로하며 개발자 경험을 강조하며 중소형 프로젝트에 적합합니다.

응용 프로그램 성능을 향상시키기 위해 Laravel에서 캐싱을 구현하려면 어떻게해야합니까? 응용 프로그램 성능을 향상시키기 위해 Laravel에서 캐싱을 구현하려면 어떻게해야합니까? Mar 17, 2025 pm 02:35 PM

이 기사에서는 캐시 페이스, 캐시 태그 및 원자 연산을 사용하여 성능을 높이고 구성을 다루기 위해 Laravel에서 캐싱 구현에 대해 논의합니다. 또한 캐시 구성에 대한 모범 사례를 간략하게 설명하고 캐시에 대한 데이터 유형을 제안합니다.

Laravel에서 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장하는 방법은 무엇입니까? Laravel에서 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장하는 방법은 무엇입니까? Mar 17, 2025 pm 02:37 PM

이 기사에서는 Laravel에서 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 유지하고 DB Facade 및 Eloquent 모델, 모범 사례, 예외 처리 및 트랜잭션을 모니터링 및 디버깅하기위한 도구를 자세히 설명하는 데이터 일관성을 유지합니다.

See all articles