feat(authorization): establish many-to-many relationship between roles and menus, add migration and seeder updates

This commit is contained in:
2026-07-30 16:54:25 -03:00
parent d56d387933
commit a20b1713d3
8 changed files with 163 additions and 2 deletions

View File

@@ -17,7 +17,7 @@ class AuthorizationSeederTest extends TestCase
$this->seed(AuthorizationSeeder::class);
$this->assertSame(
['admin', 'tenant_admin', 'user'],
['admin', 'adminapp', 'tenant_admin', 'user'],
Role::query()->orderBy('codigo')->pluck('codigo')->all()
);
$this->assertCount(22, Permission::query()->get());
@@ -28,10 +28,12 @@ class AuthorizationSeederTest extends TestCase
$this->seed(AuthorizationSeeder::class);
$admin = Role::query()->where('codigo', 'admin')->firstOrFail();
$appAdmin = Role::query()->where('codigo', 'adminapp')->firstOrFail();
$tenantAdmin = Role::query()->where('codigo', 'tenant_admin')->firstOrFail();
$user = Role::query()->where('codigo', 'user')->firstOrFail();
$this->assertCount(22, $admin->permissions);
$this->assertCount(0, $appAdmin->permissions);
$this->assertCount(21, $tenantAdmin->permissions);
$this->assertFalse($tenantAdmin->permissions->contains('codigo', 'roles.gestionar'));
$this->assertCount(0, $user->permissions);
@@ -42,7 +44,7 @@ class AuthorizationSeederTest extends TestCase
$this->seed(AuthorizationSeeder::class);
$this->seed(AuthorizationSeeder::class);
$this->assertCount(3, Role::query()->get());
$this->assertCount(4, Role::query()->get());
$this->assertCount(22, Permission::query()->get());
$this->assertDatabaseCount('roles_permisos', 43);
}

View File

@@ -4,8 +4,10 @@ namespace Tests\Feature\Seeders;
use App\Domains\Attachable\Enums\AttachmentType;
use App\Domains\Attachable\Models\Attachment;
use App\Domains\Authorization\Models\Role;
use App\Domains\Menu\Models\Menu;
use App\Domains\Tenant\Models\Tenant;
use Database\Seeders\AuthorizationSeeder;
use Database\Seeders\MenuSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
@@ -45,6 +47,48 @@ class MenuSeederTest extends TestCase
}
}
public function test_it_assigns_menus_to_the_expected_roles(): void
{
$this->seed(AuthorizationSeeder::class);
$this->seed(MenuSeeder::class);
$allMenuCodes = Menu::query()
->orderBy('code')
->pluck('code')
->all();
$userMenuCodes = Menu::query()
->where('code', 'not like', 'admin.%')
->orderBy('code')
->pluck('code')
->all();
foreach (['admin', 'adminapp'] as $roleCode) {
$roleMenuCodes = Role::query()
->where('codigo', $roleCode)
->firstOrFail()
->menus()
->orderBy('menues.code')
->pluck('menues.code')
->all();
$this->assertSame($allMenuCodes, $roleMenuCodes);
}
$userRoleMenuCodes = Role::query()
->where('codigo', 'user')
->firstOrFail()
->menus()
->orderBy('menues.code')
->pluck('menues.code')
->all();
$this->assertSame($userMenuCodes, $userRoleMenuCodes);
$this->assertDatabaseCount(
'menues_roles',
(count($allMenuCodes) * 2) + count($userMenuCodes)
);
}
public function test_it_seeds_the_account_menu_hierarchy(): void
{
$tenant = $this->createTenant('account_tenant');