Skip to content

Commit cf29bb3

Browse files
authored
Super admin (#48)
* Update Role.php * Update Permission.php * Update RolesAndPermissionsSeeder.php * Update .env.example * Update .env.testing * Update LoginController.php * Update UsersSeeder.php * Seed super admin and admin * Update AuthServiceProvider.php * Update User.php * Update RolesAndPermissionsSeeder.php
1 parent 03a58c4 commit cf29bb3

File tree

10 files changed

+27
-4
lines changed

10 files changed

+27
-4
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ APP_KEY=base64:jpd/wy450S/8N0y6OfuRoZ8yS3AWEzrbkSgo08djF4w=
44
APP_DEBUG=true
55
APP_URL=http://laravel-inertia-template.test
66

7+
SEED_SUPER_ADMIN_EMAIL=super@laravel-inertia-template.test
78
SEED_ADMIN_EMAIL=admin@laravel-inertia-template.test
89

910
LOG_CHANNEL=stack

.env.testing

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ APP_URL=http://laravel-inertia-template.test
66

77
BCRYPT_ROUNDS=4
88

9+
SEED_SUPER_ADMIN_EMAIL=super@laravel-inertia-template.test
910
SEED_ADMIN_EMAIL=admin@laravel-inertia-template.test
1011

1112
LOG_CHANNEL=stack

app/Enums/Permission.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
enum Permission: string
66
{
7+
case ACCESS_ADMIN = 'access-filament';
8+
79
case EDIT_ORGANISATION = 'edit-organisation';
810
case UPDATE_ORGANISATION = 'update-organisation';
911

app/Enums/Role.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
enum Role: string
66
{
7+
case SUPER_ADMIN = 'super-admin';
78
case ADMIN = 'admin';
89
case USER = 'user';
910

app/Http/Controllers/LoginController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public function show(Request $request)
1313
$isProd = \app()->environment('production');
1414

1515
return \inertia('Login/Show', [
16-
'email' => ! $isProd ? \env('SEED_ADMIN_EMAIL') : '',
16+
'email' => ! $isProd ? \env('SEED_SUPER_ADMIN_EMAIL') : '',
1717
'password' => ! $isProd ? '12345' : '',
1818
'remember' => ! $isProd ? true : false,
1919
'redirect' => $request->query('redirect', ''),

app/Models/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function updatePassword(?string $new_password = '')
7979

8080
public function canAccessPanel(Panel $panel): bool
8181
{
82-
return $this->hasRole(Role::ADMIN->value);
82+
return $this->hasRole(Role::SUPER_ADMIN->value);
8383
}
8484

8585
public function getFilamentName(): string

app/Providers/AuthServiceProvider.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
// use Illuminate\Support\Facades\Gate;
66

7+
use App\Enums\Role;
78
use App\Models\User;
89
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
910
use Illuminate\Support\Facades\Gate;
@@ -27,7 +28,7 @@ class AuthServiceProvider extends ServiceProvider
2728
public function boot()
2829
{
2930
Gate::define('viewPulse', function (User $user) {
30-
return $user->hasRole('admin');
31+
return $user->hasRole(Role::SUPER_ADMIN->value);
3132
});
3233
}
3334
}

database/seeders/OrganisationsSeeder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class OrganisationsSeeder extends Seeder
1414

1515
public function run()
1616
{
17-
User::whereHas('roles', fn ($q) => $q->where('name', Role::ADMIN->value))
17+
User::whereHas('roles', fn ($q) => $q->where('name', [Role::SUPER_ADMIN->value, Role::ADMIN->value]))
1818
->get()
1919
->each(function (User $user) {
2020
$user->currentOrganisation()

database/seeders/RolesAndPermissionsSeeder.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ class RolesAndPermissionsSeeder extends Seeder
1616

1717
protected Collection $roles;
1818

19+
protected Collection $superAdminPermissions;
20+
1921
protected Collection $orgnaisationPermissions;
2022

2123
protected Collection $postPermissions;
@@ -30,13 +32,18 @@ public function run()
3032
protected function createRoles()
3133
{
3234
$this->roles = \collect([
35+
Role::SUPER_ADMIN->value => SpatieRole::create(['name' => Role::SUPER_ADMIN]),
3336
Role::ADMIN->value => SpatieRole::create(['name' => Role::ADMIN]),
3437
Role::USER->value => SpatieRole::create(['name' => Role::USER]),
3538
]);
3639
}
3740

3841
protected function createPermissions()
3942
{
43+
$this->superAdminPermissions = \collect([
44+
SpatiePermission::create(['name' => Permission::ACCESS_ADMIN]),
45+
]);
46+
4047
$this->orgnaisationPermissions = \collect([
4148
SpatiePermission::create(['name' => Permission::EDIT_ORGANISATION]),
4249
SpatiePermission::create(['name' => Permission::UPDATE_ORGANISATION]),
@@ -53,6 +60,8 @@ protected function createPermissions()
5360

5461
protected function assignPermissionsToRoles()
5562
{
63+
$this->roles->get(Role::SUPER_ADMIN->value)->givePermissionTo($this->superAdminPermissions);
64+
5665
$this->roles->get(Role::ADMIN->value)->givePermissionTo($this->postPermissions);
5766
$this->roles->get(Role::ADMIN->value)->givePermissionTo($this->orgnaisationPermissions);
5867

database/seeders/UsersSeeder.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ class UsersSeeder extends Seeder
1313

1414
public function run()
1515
{
16+
User::factory()
17+
->afterCreating(function (User $user) {
18+
$user->assignRole(Role::SUPER_ADMIN->value, Role::ADMIN->value);
19+
})
20+
->create([
21+
'email' => \env('SEED_SUPER_ADMIN_EMAIL'),
22+
]);
23+
1624
User::factory()
1725
->afterCreating(function (User $user) {
1826
$user->assignRole(Role::ADMIN->value);

0 commit comments

Comments
 (0)