> PHP 프레임워크 > Laravel > laravel-permission 역할 권한 제어 [상세 코드 설명]

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

藏色散人
풀어 주다: 2020-06-20 13:35:58
앞으로
8265명이 탐색했습니다.

다음 튜토리얼 칼럼인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿