feat: restrict Developer role visibility and management in user modules

This commit is contained in:
Yoga Pangestu 2026-05-02 00:21:55 +07:00
parent 85e04dbf6a
commit b059d5a260
2 changed files with 32 additions and 8 deletions

View File

@ -19,8 +19,7 @@ class UserController extends Controller
public function index(): Response public function index(): Response
{ {
return Inertia::render('admin/master/user/index', [ return Inertia::render('admin/master/user/index', [
'users' => User::with(['profile', 'roles'])->latest()->paginate(10), 'users' => User::with(['profile', 'roles'])->whereDoesntHave('roles', fn ($query) => $query->where('name', 'Developer'))->latest()->paginate(10),
'roles' => Role::all(),
'defaultPassword' => config('auth.password_default', 'password'), 'defaultPassword' => config('auth.password_default', 'password'),
]); ]);
} }
@ -28,7 +27,7 @@ public function index(): Response
public function create(): Response public function create(): Response
{ {
return Inertia::render('admin/master/user/create', [ return Inertia::render('admin/master/user/create', [
'roles' => Role::all(), 'roles' => Role::where('name', '!=', 'Developer')->get(),
]); ]);
} }
@ -41,7 +40,7 @@ public function store(UserRequest $request): RedirectResponse
$user = User::create([ $user = User::create([
'username' => $validated['username'], 'username' => $validated['username'],
'email' => $validated['email'], 'email' => $validated['email'],
'password' => Hash::make(config('auth.password_default')), 'password' => Hash::make(config('auth.password_default', 'password')),
]); ]);
$user->profile()->create([ $user->profile()->create([
@ -79,7 +78,7 @@ public function edit(User $user): Response
return Inertia::render('admin/master/user/edit', [ return Inertia::render('admin/master/user/edit', [
'user' => $user, 'user' => $user,
'roles' => Role::all(), 'roles' => Role::where('name', '!=', 'Developer')->get(),
]); ]);
} }

View File

@ -50,17 +50,38 @@
->assertInertia(fn ($page) => $page ->assertInertia(fn ($page) => $page
->component('admin/master/user/index') ->component('admin/master/user/index')
->has('users', fn ($page) => $page->has('data')->etc()) ->has('users', fn ($page) => $page->has('data')->etc())
->has('roles')
->has('defaultPassword') ->has('defaultPassword')
); );
}); });
it('excludes users with Developer role from index', function () {
$developerRole = Role::create(['name' => 'Developer']);
$developer = User::factory()->create();
$developer->assignRole($developerRole);
$regularUser = User::factory()->create();
get(route('user.index'))
->assertOk()
->assertInertia(fn ($page) => $page
->has('users.data', fn ($data) => $data
->each(fn ($user) => $user->where('id', fn ($id) => $id !== $developer->id)->etc())
->etc()
)
);
});
it('can access user create page', function () { it('can access user create page', function () {
Role::create(['name' => 'Developer']);
Role::create(['name' => 'Admin']);
get(route('user.create')) get(route('user.create'))
->assertOk() ->assertOk()
->assertInertia(fn ($page) => $page ->assertInertia(fn ($page) => $page
->component('admin/master/user/create') ->component('admin/master/user/create')
->has('roles') ->has('roles', fn ($roles) => $roles
->each(fn ($role) => $role->where('name', fn ($name) => $name !== 'Developer')->etc())
)
); );
}); });
@ -105,6 +126,8 @@
}); });
it('can access user edit page', function () { it('can access user edit page', function () {
Role::create(['name' => 'Developer']);
Role::create(['name' => 'Admin']);
$user = User::factory()->create(); $user = User::factory()->create();
get(route('user.edit', $user)) get(route('user.edit', $user))
@ -112,7 +135,9 @@
->assertInertia(fn ($page) => $page ->assertInertia(fn ($page) => $page
->component('admin/master/user/edit') ->component('admin/master/user/edit')
->has('user') ->has('user')
->has('roles') ->has('roles', fn ($roles) => $roles
->each(fn ($role) => $role->where('name', fn ($name) => $name !== 'Developer')->etc())
)
); );
}); });