티스토리 뷰
<?php
namespace Tests\Feature;
use App\Models\AdminUser;
use Auth;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Tests\TestCase;
class AdminACLTest extends TestCase
{
/**
* @test
*/
public function superAdminAssignRole()
{
$adminUser = AdminUser::factory()->create();
$role = Role::findOrCreate('superAdmin', 'admin');
$permission = Permission::findOrCreate('rwd', 'admin');
$role->hasPermissionTo($permission);
$superAdminUser = $adminUser->assignRole($role);
$this->assertEquals(true, $superAdminUser->hasRole('superAdmin', 'admin'));
return $superAdminUser;
}
/**
* @test
*/
public function marketingAdminAssignRole()
{
$adminUser = AdminUser::factory()->create();
$role = Role::findOrCreate('marketingAdmin', 'admin');
$permission = Permission::findOrCreate('rwd', 'admin');
$role->hasPermissionTo($permission);
$marketingAdminUser = $adminUser->assignRole($role);
$this->assertEquals(true, $marketingAdminUser->hasRole('marketingAdmin', 'admin'));
return $marketingAdminUser;
}
/**
* @test
*/
public function sting_endpoint_super_admin()
{
$superAdminUser = $this->superAdminAssignRole();
$this->actingAs($superAdminUser, 'admin')->get('/admin/auth/login');
$response = $this->get('/admin/users');
// 로그인 확인
$this->assertEquals(true, Auth::Guard('admin')->check());
// 접근 확인
$response->assertViewIs('admin.users.index');
}
/**
* @test
*/
public function sting_endpoint_marketing_admin()
{
$marketingAdminUser = $this->marketingAdminAssignRole();
$this->actingAs($marketingAdminUser, 'admin')->get('/admin/auth/login');
$response = $this->get('/admin/users');
// 로그인 확인
$this->assertEquals(true, Auth::Guard('admin')->check());
// 접근 확인 - 마케팅admin은 users 페이지가 없음이 나오므로, 403
$response->assertForbidden();
}
}
라우터에서는 요렇게 추가 해줌.
Route::prefix('admin')
->namespace('Admin')
->middleware(['admin'])->name('admin.')
->group(function () {
Route::resource('users', 'UsersController')->middleware(['role:superAdmin'])->name('resource', 'users');
});
굳이 필요한가 싶은데, 그래도 짜봤다 뿌-듯!
-----
롤 받아오는 부분을 팩토리의 state로 받아오면 좋을거 같아요.
라우터 이름 지정했으면 이름으로 콜하는게 좋지 않을까요.
'Laravel' 카테고리의 다른 글
| [laravel 8] sail을 사용해서 환경을 구축해봅시다! (0) | 2022.07.13 |
|---|---|
| [라라벨 8] ACL - spatie permission (0) | 2021.06.28 |
| 도커(라라독) 사용하기! (1) | 2021.06.27 |
| [Laravel 8] GraphQL을 적용해보자. (0) | 2021.04.23 |
| Syntax error or access violation: 1071 Specified key was too long; (0) | 2020.09.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Testing
- xml로도
- PhpStorm
- 엘라스틱서치한글성공!
- twoseven.kr/0410
- gcp
- 테스팅환경
- UTF8
- fmf
- 프로그래밍은디버거부터시작이다
- twoserven.kr/0410
- 테스팅
- 배열을_이쁘게
- 더미데이터도유형이있어요
- JSON으로도
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함