스스로 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.)