siakad-itm/database/seeders/RolePermissionSeeder.php
Yoga Pangestu 5994f38f01 feat: implement permission checks for academic terms, courses, departments, and user management
- Added permission checks for creating, updating, and deleting academic terms, courses, and departments.
- Updated the routes to enforce permissions for various actions in the admin panel.
- Enhanced user management by adding permissions for administrators, lecturers, and students.
- Refactored components to conditionally render actions based on user permissions.
- Updated the auth type to include optional permissions array for user roles.
2026-08-30 23:27:31 +07:00

101 lines
4.2 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
class RolePermissionSeeder extends Seeder
{
public function run(): void
{
app()[PermissionRegistrar::class]->forgetCachedPermissions();
$master = [
'view-academic-terms', 'create-academic-terms', 'update-academic-terms', 'delete-academic-terms', 'update-academic-terms-status',
'view-departments', 'create-departments', 'update-departments', 'delete-departments',
'view-courses', 'create-courses', 'update-courses', 'delete-courses',
];
$academicClasses = [
'view-materials', 'create-materials', 'update-materials', 'delete-materials',
'view-assignments', 'create-assignments', 'update-assignments', 'delete-assignments',
'view-assignment-submissions', 'create-assignment-submissions', 'update-assignment-submissions', 'delete-assignment-submissions',
'view-schedules', 'create-schedules', 'update-schedules', 'delete-schedules',
'view-attendances', 'create-attendances', 'delete-attendances',
];
$manage = [
'view-course-classes', 'create-course-classes', 'update-course-classes', 'delete-course-classes',
'view-course-class-enrollments', 'create-course-class-enrollments', 'delete-course-class-enrollments',
'view-course-registrations', 'create-course-registrations', 'approve-course-registrations', 'reject-course-registrations',
'view-announcements', 'create-announcements', 'update-announcements', 'delete-announcements',
];
$finances = [
'view-tuition-invoices', 'create-tuition-invoices', 'update-tuition-invoices', 'delete-tuition-invoices',
'view-tuition-payments', 'create-tuition-payments', 'update-tuition-payments', 'delete-tuition-payments',
];
$services = [
'view-letter-requests', 'create-letter-requests', 'update-letter-requests', 'delete-letter-requests',
'view-academic-advising-logs', 'create-academic-advising-logs', 'update-academic-advising-logs', 'delete-academic-advising-logs',
];
$users = [
'view-lecturers', 'create-lecturers', 'update-lecturers', 'delete-lecturers', 'reset-lecturers-password', 'update-lecturers-status', 'export-lecturers',
'view-students', 'create-students', 'update-students', 'delete-students', 'reset-students-password', 'update-students-academic-status', 'update-students-account-status', 'export-students',
'view-administrators', 'create-administrators', 'update-administrators', 'delete-administrators', 'reset-administrators-password', 'update-administrators-status',
];
$permissionNames = [
'view-dashboard',
...$master,
...$academicClasses,
...$manage,
...$finances,
...$services,
...$users,
];
foreach ($permissionNames as $name) {
Permission::firstOrCreate(['name' => $name, 'guard_name' => 'web']);
}
app()[PermissionRegistrar::class]->forgetCachedPermissions();
$roles = [
'mahasiswa' => ['view-dashboard'],
'dosen' => ['view-dashboard'],
'staff-admin' => [
'view-dashboard',
...$master,
...$academicClasses,
...$manage,
...$services,
...$users,
],
'staff-keuangan' => [
'view-dashboard',
...$finances,
],
'kaprodi' => [
'view-dashboard',
'view-academic-terms',
'view-courses',
'view-course-classes',
'view-course-registrations',
'view-students',
],
'developer' => $permissionNames,
];
foreach ($roles as $roleName => $rolePermissions) {
$role = Role::firstOrCreate(['name' => $roleName, 'guard_name' => 'web']);
$role->syncPermissions($rolePermissions);
}
}
}