laravel-permission 시도

개시하다


Laavel에서 역할 액세스 제어에 기반한 비교적 신뢰할 수 있는 것을 제공해야 하기 때문이다
라벨의 확장 포장에서 익숙한 스파티가 제공하는 laravel-permission를 시도했다.
매번 영어를 읽을 때마다 태만하기 때문에 남아 있어야 한다.
만약 사용 과정에서 지식을 얻게 된다면, 나는 가능한 한 이곳을 갱신할 것이다.
지금은 검사를 인정하는 각 중간부품의 테스트 코드를 써서 내용을 이해하는 수준을 옮긴다.

컨디션


PHP 7.2
Laravel 5.7
※ 동작을 확인했다

설치하다.

composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
표를 몇 개 만들어야 하기 때문에 모형을 이해해야 한다

roles와perissions의 이중 관문name
config/auth.php로 설정된 기본 단어를 입력하십시오.
이중 언어를 여러 개 설정하고 싶은 경우길잡이가 있었지만, 이번에는 필요 없어 건너뛰었다.
model_type에 Eloquent 반이 있어요.
나는 Eloquent의 다중모드 관계를 사용해서 실현된 것 같다는 것을 발견했다.
(소스를 보니 사실은 이렇다.)

테이블 정보


roles


개요


역할 마스터 테이블
필요한 물건을 미리 등록하다
등록 예:
  • admin
  • operator
  • customer
  • 기다리다
    ※ 슈퍼-admin으로 정의할 수 있으므로 이 부분에서도 신중하게 설정

    등록 방법

    $role = \Spatie\Permission\Models\Role::create(['name' => 'operator']);
    

    model_has_roles


    개요


    작용과 모델을 연관시키다
    사용자 모델을 주면 관리자나 운용자
    부장, 과장 등과 직무를 연결할 수 있다고 생각합니다.

    등록 방법

    $user->assignRole('operator', 'customer');
    
    'operator'이런 데가 Role입니다.아이디도 가능해요.
    방법에서string이나numberic를 검사해서 검색 조건을 전환합니다

    해제 방법

    $user->removeRole('read');
    

    permissions


    개요


    설정할 수 있는 마스터 테이블
    필요한 물건을 미리 등록하다
    등록 예:
  • read
  • write
  • delete
  • 기다리다

    등록 방법

    $permission = \Spatie\Permission\Models\Permission::create(['name' => 'read']);
    

    model_has_permissions


    개요


    모델에 대한 라이센스 직접 설정
    사용자 모델을 주면 특권 사용자 같은 걸 만들 수 있을 것 같아요.
    (일반적으로 관리자 이상의 사람이 접촉하는 기능이지만, 실제로는 사무원을 가입시키는 것이기 때문에 관리자가 아니더라도 권한 같은 것을 주기를 원한다)

    등록 방법

    $user->givePermissionTo('read', 'write');
    
    'read'이런 데가 퍼미션이에요.아이디도 가능해요.
    방법에서string이나numberic를 검사해서 검색 조건을 전환합니다

    해제 방법

    $user->revokePermissionTo('read');
    

    role_has_permissions


    개요


    역할과 연관된 마스터 테이블을 설정할 수 있습니다.

    등록 방법


    다음 중 어느 것
    $role->givePermissionTo($permission);
    // or
    $permission->assignRole($role);
    
    합쳐서 등록하고 싶은 경우 아래 임의의 하나를 사용하면 빙빙 돌지 않을 수 있다
    (안에서 왔다 갔다 한다)
    $role->syncPermissions($permissions);
    // or
    $permission->syncRoles($roles);
    

    해제 방법


    캐릭터에 대한 허가 설정을 동적으로 바꾸는 인상은 잘 생기지 않지만, 다음과 같이 하면 된다.
    (잘못된 데이터로 만들면 지우려는 거겠지~)
    $role->revokePermissionTo($permission);
    // or
    $permission->removeRole($role);
    

    2019/01/23 보충


    각 중간부품의 설치에 사용되지 않습니다.
    언제 사용했는지 확인해 보세요.
    "has Permission Via Role을 통해 Permission을 전달한 후 그 Permission이 Role에 존재하는지 확인하세요."
    네.
    모든 Role에게 작은 권한을 주고 싶다면 필요합니다.
    캐릭터나 권한 검사를 쉽게 통과하고 싶을 때
    이 책상 쓸 필요 없잖아.

    처음에 무엇이 필요했는지


    시스템의 초기 설정에는 다음 테이블이 필요합니다.
    (수리 화면을 만들어 넣을 수 있지만.)
  • roles
  • permissions
  • role_has_permissions
  • 마이그레이션 수행


    양식을 알았더라도 마이그레이션을 수행합니다.
    php artisan migrate
    
    이후 Seeder 같은 방법으로 데이터 데이터를 아래 표에 잘 삽입한다
    * roles
    * permissions
    * role_has_permissions

    사용법


    사용자 등록


    (귀찮아서 사랑을 끊는다)
    User:create는 반환값으로 얻은 사용자로 assignRole 또는 givePermissionTo를 진행합니다

    코드 불러오기


    middleware


    middleware로 설정하고 싶어서 middleware를 사용합니다
    게다가
    App/Http/Kernel.php
    protected $routeMiddleware = [
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ];
    
    위의 설치를 보면 알 수 있지만 Laavel을 보면 특별한 구조를 가진 인증 사용자의 소지 방법이 있는 경우
    자신의 반을 세워 교체하면 소원대로 이루어질 수 있다.
    (설치 자체가 너무 간단해서 쓰지 않음)
    route.php
    
    // rolesのデータでだけチェック
    Route::group(['middleware' => ['role:admin|operator']], function () {
        //
    });
    
    // permissionsのデータでだけチェック
    Route::group(['middleware' => ['permission:read|write']], function () {
        //
    });
    
    // roles or permissionsのデータに居るかをチェック
    Route::group(['middleware' => ['role_or_permission:operator|read']], function () {
        //
    });
    
    role_has_permission은 어디에서 사용되나요?

    blade


    아니오, 하지만 남으세요
    @role('operator')
    @endrole
    
    @hasallroles('writer|admin')
    @else
    @endhasallroles
    
    퍼미션 주변은 다른 것과 똑같이 사용한다고 합니다@can

    끝말


    대충 이해한 것 같습니다.
    업무 시스템이 필요로 하는 곳도 이루어져서 매우 좋다.
    이번 조건에 맞으면 쓰세요.
    기술적인 과제로 베일을 어떻게 합치죠?
    메뉴 주위는 & SPA로 쓴 것이 아닙니다. Blade에 직접 써서 vue 구성 요소를 사용하지 않도록 해야 할 것 같습니다.

    좋은 웹페이지 즐겨찾기