스스로 Laravel 권한을 만드십시오.
                                            
                                                
                                                
                                                
                                                
                                                
                                                 13965 단어  permissionlaravelauthorizationphp
                    
라라벨 가디언
 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/Traits는 QueryKit 특성을 제공하여 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()
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(스스로 Laravel 권한을 만드십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://dev.to/ngodinhcuong/make-laravel-permission-by-yourself-2m83
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
$ composer require cuongnd88/lara-guardian
<?php
// config/app.php
return [
    // ...
    'providers' => [
        // ...
        Cuongnd88\LaraGuardian\LaraGuardianServiceProvider::class,
    ]
    // ...
];
php artisan vendor:publish --provider="Cuongnd88\LaraQueryKit\LaraQueryKitServiceProvider"
php artisan make:guardian
Route::group(['middleware' => ['guardian']], function(){
    Route::get('/user', function(){
        dump("Congratulation. You have the right permission");
    })->name('user.read');
});
    protected $routeMiddleware = [
        . . . .
        'guardian' => \App\Http\Middleware\GuardianMiddleware::class,
    ];
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;
}
    public function joinGroup(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->joinGroup(2);
    }
    public function joinManyGroups(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->joinMultiGroups([
            ['group_id' => 1],
            ['group_id' => 3],
        ]);
    }
    public function getUserPermissions(Request $request)
    {
        $user = \App\Models\User::find(10);
        $user->hasPermissions()->toArray();
    }
    public function checkUserAccess(Request $request)
    {
        $user = \App\Models\User::find(10);
        if ($user->rightAccess('product', 'create')) {
            dump('Right Access');
        } else {
            dump('Forbidden');
        }
    }
php artisan guardian --action[=ACTION] --model[=MODEL]
php artisan guardian --action=import --model=actions
$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']
    );
    $exceptable = ['created_at', 'updated_at', 'deleted_at'];
    $data = app(User::class)->except($exceptable)->get()->toArray()
Reference
이 문제에 관하여(스스로 Laravel 권한을 만드십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ngodinhcuong/make-laravel-permission-by-yourself-2m83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)