Skip to content

Commit e5a8844

Browse files
committed
feat: add more permissions
- added more permissions - improved roles and permissions queries
1 parent 85ec9df commit e5a8844

File tree

4 files changed

+392
-196
lines changed

4 files changed

+392
-196
lines changed

database/seeders/DatabaseSeeder.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,26 @@
66

77
use Illuminate\Database\Seeder;
88

9-
final class DatabaseSeeder extends Seeder
9+
class DatabaseSeeder extends Seeder
1010
{
1111
/**
1212
* Seed the application's database.
1313
*/
1414
public function run(): void
1515
{
16+
// Seed permissions first (required for roles)
1617
$this->call([
17-
RoleSeeder::class,
1818
PermissionSeeder::class,
19+
]);
20+
21+
// Seed roles and assign permissions
22+
$this->call([
23+
RoleSeeder::class,
1924
RolePermissionSeeder::class,
25+
]);
26+
27+
// Seed other data
28+
$this->call([
2029
UserSeeder::class,
2130
]);
2231
}
Lines changed: 150 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,162 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Database\Seeders;
46

57
use App\Models\Permission;
68
use Illuminate\Database\Seeder;
79

8-
class PermissionSeeder extends Seeder
10+
/**
11+
* Permission Seeder
12+
*
13+
* Creates all the permissions used in the application.
14+
* This seeder should be run before RoleSeeder and RolePermissionSeeder.
15+
*/
16+
final class PermissionSeeder extends Seeder
917
{
10-
public function run()
18+
/**
19+
* All permissions in the system
20+
*
21+
* @var array<int, string>
22+
*/
23+
private const PERMISSIONS = [
24+
// User & Account Management
25+
'view_users',
26+
'create_users',
27+
'edit_users',
28+
'delete_users',
29+
'ban_users',
30+
'block_users',
31+
'restore_users',
32+
'assign_roles',
33+
'manage_roles',
34+
'manage_permissions',
35+
'edit_profile',
36+
'view_user_activity',
37+
'register_user',
38+
'view_own_profile',
39+
40+
// Article/Post Management
41+
'view_posts',
42+
'create_posts',
43+
'edit_posts',
44+
'delete_posts',
45+
'publish_posts',
46+
'edit_others_posts',
47+
'delete_others_posts',
48+
'approve_posts',
49+
'feature_posts',
50+
'pin_posts',
51+
'archive_posts',
52+
'restore_posts',
53+
'trash_posts',
54+
'report_posts',
55+
'like_posts',
56+
'dislike_posts',
57+
'view_own_posts',
58+
'schedule_posts',
59+
60+
// Comment Management
61+
'comment_moderate',
62+
'create_comments',
63+
'edit_comments',
64+
'delete_comments',
65+
'approve_comments',
66+
'report_comments',
67+
'view_comments',
68+
'edit_own_comments',
69+
'delete_own_comments',
70+
71+
// Taxonomy Management
72+
'manage_categories',
73+
'create_categories',
74+
'edit_categories',
75+
'delete_categories',
76+
'view_categories',
77+
'manage_tags',
78+
'create_tags',
79+
'edit_tags',
80+
'delete_tags',
81+
'view_tags',
82+
83+
// Newsletter
84+
'view_newsletter_subscribers',
85+
'manage_newsletter_subscribers',
86+
'subscribe_newsletter',
87+
'unsubscribe_newsletter',
88+
'send_newsletter',
89+
90+
// Notifications
91+
'view_notifications',
92+
'manage_notifications',
93+
'send_notifications',
94+
'read_notifications',
95+
'delete_notifications',
96+
97+
// Media Management
98+
'upload_media',
99+
'delete_media',
100+
'manage_media',
101+
'view_media',
102+
'edit_media',
103+
104+
// Analytics & Settings
105+
'view_analytics',
106+
'manage_settings',
107+
'view_dashboard',
108+
'export_data',
109+
110+
// Social/Community
111+
'follow_users',
112+
'unfollow_users',
113+
'view_user_profiles',
114+
'send_messages',
115+
116+
// General
117+
'manage_options',
118+
'read',
119+
'access_api',
120+
'view_logs',
121+
];
122+
123+
/**
124+
* Run the database seeds.
125+
*/
126+
public function run(): void
11127
{
12-
$permissions = [
13-
// User & Account Management
14-
'view_users',
15-
'create_users',
16-
'edit_users',
17-
'delete_users',
18-
'ban_users',
19-
'block_users',
20-
'restore_users',
21-
'assign_roles',
22-
'manage_roles',
23-
'manage_permissions',
24-
'edit_profile',
25-
'view_user_activity',
26-
27-
// Article/Post Management
28-
'view_posts',
29-
'edit_posts',
30-
'delete_posts',
31-
'publish_posts',
32-
'edit_others_posts',
33-
'delete_others_posts',
34-
'approve_posts',
35-
'feature_posts',
36-
'pin_posts',
37-
'archive_posts',
38-
'restore_posts',
39-
'trash_posts',
40-
'report_posts',
41-
'like_posts',
42-
'dislike_posts',
43-
44-
// Comment Management
45-
'comment_moderate',
46-
'edit_comments',
47-
'delete_comments',
48-
'approve_comments',
49-
'report_comments',
50-
51-
// Taxonomy Management
52-
'manage_categories',
53-
'manage_tags',
54-
55-
// Newsletter
56-
'view_newsletter_subscribers',
57-
'manage_newsletter_subscribers',
58-
'subscribe_newsletter',
59-
60-
// Notifications
61-
'view_notifications',
62-
'manage_notifications',
63-
'send_notifications',
64-
65-
// Media Management
66-
'upload_media',
67-
'delete_media',
68-
'manage_media',
69-
70-
// Analytics & Settings
71-
'view_analytics',
72-
'manage_settings',
73-
74-
// Social/Community
75-
'follow_users',
76-
77-
// General
78-
'manage_options',
79-
'read',
80-
];
81-
82-
foreach ($permissions as $permission) {
83-
$slug = strtolower(str_replace([' ', '_'], '-', $permission));
84-
Permission::firstOrCreate([
85-
'name' => $permission,
86-
'slug' => $slug,
87-
]);
128+
$this->command->info('Starting permission creation...');
129+
130+
try {
131+
$createdCount = 0;
132+
$existingCount = 0;
133+
134+
foreach (self::PERMISSIONS as $permission) {
135+
$slug = strtolower(str_replace([' ', '_'], '-', $permission));
136+
137+
$existingPermission = Permission::where('name', $permission)->first();
138+
139+
if ($existingPermission) {
140+
$existingCount++;
141+
$this->command->line("Permission '{$permission}' already exists");
142+
143+
continue;
144+
}
145+
146+
Permission::create([
147+
'name' => $permission,
148+
'slug' => $slug,
149+
]);
150+
151+
$createdCount++;
152+
$this->command->info("Created permission: {$permission}");
153+
}
154+
155+
$this->command->info("Permission seeding completed. Created: {$createdCount}, Existing: {$existingCount}");
156+
157+
} catch (\Throwable $e) {
158+
$this->command->error('Failed to create permissions: '.$e->getMessage());
159+
throw $e;
88160
}
89161
}
90162
}

0 commit comments

Comments
 (0)