티스토리 뷰

Laravel

laravel 8] spatie/permission 테스트 코드

rediate.will 2021. 6. 27. 23:24

 

<?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로 받아오면 좋을거 같아요.

 

라우터 이름 지정했으면 이름으로 콜하는게 좋지 않을까요.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
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
글 보관함