Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 34 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -371,40 +371,58 @@ Based on the defined roles and permissions, the following admin and management A
- **NextJS Client App**
- Complete NextJS App to integrate all these APIs, it will be separate REPO once i complete the APIs

- **Admin APIs**
- User management: list, create, update, delete, ban, block, restore users
- Role management: assign roles, manage roles, manage permissions
- View user activity logs
- Approve/ban/restore users
- Manage site-wide settings and options
- **Role Management**
- Assign roles, manage roles, manage permissions
- Role CRUD operations
- Permission assignment and management
- User role assignment

- **Article/Post Management**
- Approve, feature, pin, archive, restore, trash, and report posts (admin/editor)
- Edit/delete others' posts (admin/editor)
- Create, update, delete articles
- Pin, archive, restore, trash articles
- Like/dislike articles
- Article status management (draft, published, archived)

- **Comment Management**
- Moderate, approve, edit, delete, and report comments (admin/editor)
- Create, update, delete comments
- Report comments
- User comment management

- **Taxonomy Management**
- Manage categories and tags (admin/editor)

- **Newsletter Management**
- View/manage newsletter subscribers (admin/editor)

- **Notification Management**
- View/manage/send notifications (admin/editor)
- Category CRUD operations
- Tag CRUD operations
- Hierarchical category management

- **Media Management**
- Upload, delete, and manage media (admin/editor)
- File upload system
- Media library management
- Image optimization and storage

- **Newsletter Management**
- Newsletter subscription endpoints
- User notification management
- Email subscription handling

- **Analytics & Settings**
- View analytics dashboard (admin only)
- Manage site settings (admin only)
- Site statistics and metrics
- User activity tracking

- **Social/Community Features**
- User follow/unfollow system
- User profile management
- Social interaction features

- **General**
- Ensure all permission checks are enforced in controllers/routes
- Add missing API endpoints for all permissions listed in `PermissionSeeder` and `RolePermissionSeeder`
- Add integration and feature tests for all admin/management APIs
- Add integration and feature tests for all remaining APIs
- Implement rate limiting for all public endpoints
- Optimize database queries and add proper indexing
- Implement caching strategies for better performance

> _Review the permissions in `database/seeders/PermissionSeeder.php` and `RolePermissionSeeder.php` to ensure all are mapped to actual API endpoints and controller logic._

Expand Down
13 changes: 11 additions & 2 deletions database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,26 @@

use Illuminate\Database\Seeder;

final class DatabaseSeeder extends Seeder
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
// Seed permissions first (required for roles)
$this->call([
RoleSeeder::class,
PermissionSeeder::class,
]);

// Seed roles and assign permissions
$this->call([
RoleSeeder::class,
RolePermissionSeeder::class,
]);

// Seed other data
$this->call([
UserSeeder::class,
]);
}
Expand Down
228 changes: 150 additions & 78 deletions database/seeders/PermissionSeeder.php
Original file line number Diff line number Diff line change
@@ -1,90 +1,162 @@
<?php

declare(strict_types=1);

namespace Database\Seeders;

use App\Models\Permission;
use Illuminate\Database\Seeder;

class PermissionSeeder extends Seeder
/**
* Permission Seeder
*
* Creates all the permissions used in the application.
* This seeder should be run before RoleSeeder and RolePermissionSeeder.
*/
final class PermissionSeeder extends Seeder
{
public function run()
/**
* All permissions in the system
*
* @var array<int, string>
*/
private const PERMISSIONS = [
// User & Account Management
'view_users',
'create_users',
'edit_users',
'delete_users',
'ban_users',
'block_users',
'restore_users',
'assign_roles',
'manage_roles',
'manage_permissions',
'edit_profile',
'view_user_activity',
'register_user',
'view_own_profile',

// Article/Post Management
'view_posts',
'create_posts',
'edit_posts',
'delete_posts',
'publish_posts',
'edit_others_posts',
'delete_others_posts',
'approve_posts',
'feature_posts',
'pin_posts',
'archive_posts',
'restore_posts',
'trash_posts',
'report_posts',
'like_posts',
'dislike_posts',
'view_own_posts',
'schedule_posts',

// Comment Management
'comment_moderate',
'create_comments',
'edit_comments',
'delete_comments',
'approve_comments',
'report_comments',
'view_comments',
'edit_own_comments',
'delete_own_comments',

// Taxonomy Management
'manage_categories',
'create_categories',
'edit_categories',
'delete_categories',
'view_categories',
'manage_tags',
'create_tags',
'edit_tags',
'delete_tags',
'view_tags',

// Newsletter
'view_newsletter_subscribers',
'manage_newsletter_subscribers',
'subscribe_newsletter',
'unsubscribe_newsletter',
'send_newsletter',

// Notifications
'view_notifications',
'manage_notifications',
'send_notifications',
'read_notifications',
'delete_notifications',

// Media Management
'upload_media',
'delete_media',
'manage_media',
'view_media',
'edit_media',

// Analytics & Settings
'view_analytics',
'manage_settings',
'view_dashboard',
'export_data',

// Social/Community
'follow_users',
'unfollow_users',
'view_user_profiles',
'send_messages',

// General
'manage_options',
'read',
'access_api',
'view_logs',
];

/**
* Run the database seeds.
*/
public function run(): void
{
$permissions = [
// User & Account Management
'view_users',
'create_users',
'edit_users',
'delete_users',
'ban_users',
'block_users',
'restore_users',
'assign_roles',
'manage_roles',
'manage_permissions',
'edit_profile',
'view_user_activity',

// Article/Post Management
'view_posts',
'edit_posts',
'delete_posts',
'publish_posts',
'edit_others_posts',
'delete_others_posts',
'approve_posts',
'feature_posts',
'pin_posts',
'archive_posts',
'restore_posts',
'trash_posts',
'report_posts',
'like_posts',
'dislike_posts',

// Comment Management
'comment_moderate',
'edit_comments',
'delete_comments',
'approve_comments',
'report_comments',

// Taxonomy Management
'manage_categories',
'manage_tags',

// Newsletter
'view_newsletter_subscribers',
'manage_newsletter_subscribers',
'subscribe_newsletter',

// Notifications
'view_notifications',
'manage_notifications',
'send_notifications',

// Media Management
'upload_media',
'delete_media',
'manage_media',

// Analytics & Settings
'view_analytics',
'manage_settings',

// Social/Community
'follow_users',

// General
'manage_options',
'read',
];

foreach ($permissions as $permission) {
$slug = strtolower(str_replace([' ', '_'], '-', $permission));
Permission::firstOrCreate([
'name' => $permission,
'slug' => $slug,
]);
$this->command->info('Starting permission creation...');

try {
$createdCount = 0;
$existingCount = 0;

foreach (self::PERMISSIONS as $permission) {
$slug = strtolower(str_replace([' ', '_'], '-', $permission));

$existingPermission = Permission::where('name', $permission)->first();

if ($existingPermission) {
$existingCount++;
$this->command->line("Permission '{$permission}' already exists");

continue;
}

Permission::create([
'name' => $permission,
'slug' => $slug,
]);

$createdCount++;
$this->command->info("Created permission: {$permission}");
}

$this->command->info("Permission seeding completed. Created: {$createdCount}, Existing: {$existingCount}");

} catch (\Throwable $e) {
$this->command->error('Failed to create permissions: '.$e->getMessage());
throw $e;
}
}
}
Loading