반응형
Enum 을 이용한 권한을 구분하고
이를 이용해서 사용자의 API 권한을 설정하고
sanctum을 이용한 token 생성과 조회, 삭제 예제를 보여준다.
- Enum 생성
- Enum 조회
- Enum Validate 처리
Enum 생성하기
touch app/Enums/Ability.php
내용 입력
namespace App\Enums;
enum Ability: string
{
case POST_CREATE = 'post:create';
case POST_READ = 'post:read';
case POST_UPDATE = 'post:update';
case POST_DELETE = 'post:delete';
}
Controller 에서 데이타 넘기기
class TokenController extends Controller
{
public function create(): View
{
return view('tokens.create', [
'abilities' => Ability::cases(),
]);
}
}
Ability::cases()
View에서 처리하기
@foreach ($abilities as $ability)
<label for="{{ $ability->name }}">{{ $ability->value }}</label>
<input type="checkbox" name="abilities[]" id="{{ $ability->name }}" value="{{ $ability->value }}">
@endforeach
Validate 처리하기
namespace App\Http\Requests;
use App\Enums\Ability;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rules\Enum;
class StoreTokenRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => 'required|string',
'abilities.*' => [new Enum(Ability::class)],
];
}
}
use Illuminate\Validation\Rules\Enum;
[new Enum(Ability::class)]
저정하기
//Auth/TokenController
public function store(StoreTokenRequest $request): RedirectResponse
{
$user = $request->user();
$token = $user->createToken($request->name, $request->abilities);
return back()
->with('status', $token->plainTextToken);
}
$user->createToken();
$token->plainTextToken();
삭제하기
// Auth/TokenController
public function destroy(Request $request, PersonalAccessToken $token): RedirectResponse
{
$user = $request->user();
$user->tokens()->where('id', $token->id)->delete();
return back();
}
토큰 조회하기
//namespace App\Http\Controllers\Dashboard;
class TokenController extends Controller
{
public function __invoke(Request $request): View
{
$user = $request->user();
return view('dashboard.tokens', [
'tokens' => $user->tokens,
]);
}
}
<ul>
@foreach ($tokens as $token)
<li>
<strong>{{ $token->name }}</strong>
@foreach ($token->abilities as $ability)
<span>{{ $ability }}</span>
@endforeach
<form action="{{ route('tokens.destroy', $token) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit">토큰 삭제</button>
</form>
</li>
@endforeach
</ul>
'Laravel' 카테고리의 다른 글
Laravel - Resource 컨트롤러에 대해서 (0) | 2024.01.31 |
---|---|
Laravel - API Resource 만들기 (0) | 2024.01.31 |
Laravel - Service Container 서비스 컨테이너에 대해서 (0) | 2024.01.16 |
Laravel - sanctum 에 대해서 (0) | 2024.01.09 |
Laravel - Event에 대해서 (0) | 2024.01.08 |