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

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

藏色散人
藏色散人앞으로
2020-06-20 13:33:178204검색

다음 튜토리얼 칼럼인 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([ ' name '  =>  ' edit articles ' ]);

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

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

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

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

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

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

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

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

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

제한할 곳과 사용할 곳

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

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

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

위치는 아래와 같습니다

//“删除文章”的权限是直接分配给用户的直接权限。

요약:

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

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

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

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

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제