스스로 Laravel 권한을 만드십시오.

라라벨 가디언



Laravel Guardian 쉽게 권한을 수행할 수 있습니다.

https://github.com/cuongnd88/lara-guardian

Composer를 사용하여 1-설치cuongnd88/lara-repository.

$ composer require cuongnd88/lara-guardian


2-config/app.php에 다음 서비스 공급자를 추가합니다.

<?php
// config/app.php
return [
    // ...
    'providers' => [
        // ...
        Cuongnd88\LaraGuardian\LaraGuardianServiceProvider::class,
    ]
    // ...
];


3-실행make:guardian 명령


php artisan vendor:publish --provider="Cuongnd88\LaraQueryKit\LaraQueryKitServiceProvider"

php artisan make:guardian


App/TraitsQueryKit 특성을 제공하여 Laravel 모델을 강화합니다.
App/Guardian/Traits는 Laravel Guardian을 지원하는 특성을 가지고 있습니다.
App/Http/Middlewares/GuardianMiddleware.php는 사용자의 권한을 확인하는 것입니다.
App/Models는 Action, Role, Group, Permission, Role의 5가지 모델을 제공합니다.
database/migrations에는 작업, 역할, 그룹, 권한, 역할의 5개 테이블이 있습니다.

샘플 사용



경로 이름을 기반으로 Lara Guardian은 사용자의 권한을 확인합니다. 경로 이름 지정 시 다음 규칙을 따라야 합니다. $page.$action
Route::group(['middleware' => ['guardian']], function(){
    Route::get('/user', function(){
        dump("Congratulation. You have the right permission");
    })->name('user.read');
});

guard 파일에 app/Http/Kernel.php 미들웨어를 할당해야 합니다.

    protected $routeMiddleware = [
        . . . .
        'guardian' => \App\Http\Middleware\GuardianMiddleware::class,
    ];



가디언 모델들의 인연이 있다


MEMO : alias 테이블의 actions, pages는 경로 이름을 지정하는 데 사용되므로 공백 대신 lower-case 문자, dash 기호를 입력해야 합니다.

모델에 App\Guardian\Traits\HasGuardian.php를 추가하십시오.

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use App\Guardian\Traits\HasGuardian;

class User extends Authenticatable
{
    use Notifiable;
    use HasGuardian;
}

HasGuardian 특성은 다음을 제공합니다.
joinGroup($groupId) : 사용자가 그룹에 가입합니다.

    public function joinGroup(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->joinGroup(2);
    }

joinMultiGroups($groups) : 사용자가 다중 그룹에 가입합니다.

    public function joinManyGroups(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->joinMultiGroups([
            ['group_id' => 1],
            ['group_id' => 3],
        ]);
    }

hasPermissions(array $where = [], string $action = null, array $select = []) : 사용자의 권한을 표시합니다.

    public function getUserPermissions(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->hasPermissions()->toArray();
    }

rightAccess(string $page = null, string $action = null) : 사용자에게 액세스 권한이 있는지 확인합니다.

    public function checkUserAccess(Request $request)
    {
        $user = \App\Models\User::find(10);
        if ($user->rightAccess('product', 'create')) {
            dump('Right Access');
        } else {
            dump('Forbidden');
        }
    }


데이터 가져오기/내보내기



현재 Lara Guardian은 배열 데이터(config\guardian의 파일 읽기)를 데이터베이스로 가져오고 DB의 데이터를 간단한 명령을 사용하여 파일로 내보냅니다.

php artisan guardian --action[=ACTION] --model[=MODEL]

--action=import 또는 export 값입니다.
model=는 하나 또는 세 개의 값actions|pages|groups입니다.

예를 들어:

php artisan guardian --action=import --model=actions

App\Traits\QueryKit.php는 보호자 데이터를 가져오거나 내보낼 때 다음과 같은 유용한 방법을 지원합니다.
insertDuplicate(array $data, array $insertKeys, array $updateKeys)는 새 행을 삽입하거나 기존 행을 업데이트합니다. 첫 번째 인수는 삽입하거나 업데이트할 값으로 구성되며 두 번째 인수는 연결된 테이블 내에서 레코드를 고유하게 식별하는 열을 나열합니다. 세 번째 인수는 일치하는 레코드가 데이터베이스에 이미 있는 경우 업데이트해야 하는 열의 배열입니다.

$data = [
    ['fullname' => 'AAAA', 'email' => '[email protected]', 'age' => 20, 'address' => 'WWW'],
    ['fullname' => 'BBBBB', 'email' => '[email protected]', 'age' => 25, 'address' => 'QQQQ'],
];
\App\Models\User::insertDuplicate(
        $data,
        ['fullname', 'email'],
        ['age', 'address']
    );

except(array $columns)는 출력 데이터의 하위 집합을 검색하는 것입니다.

    $exceptable = ['created_at', 'updated_at', 'deleted_at'];
    $data = app(User::class)->except($exceptable)->get()->toArray()

좋은 웹페이지 즐겨찾기