diff --git a/app/Policies/ClassSessionPolicy.php b/app/Policies/ClassSessionPolicy.php new file mode 100644 index 0000000..6f3389a --- /dev/null +++ b/app/Policies/ClassSessionPolicy.php @@ -0,0 +1,69 @@ +can('ViewAny:ClassSession'); + } + + public function view(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('View:ClassSession'); + } + + public function create(AuthUser $authUser): bool + { + return $authUser->can('Create:ClassSession'); + } + + public function update(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('Update:ClassSession'); + } + + public function delete(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('Delete:ClassSession'); + } + + public function restore(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('Restore:ClassSession'); + } + + public function forceDelete(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('ForceDelete:ClassSession'); + } + + public function forceDeleteAny(AuthUser $authUser): bool + { + return $authUser->can('ForceDeleteAny:ClassSession'); + } + + public function restoreAny(AuthUser $authUser): bool + { + return $authUser->can('RestoreAny:ClassSession'); + } + + public function replicate(AuthUser $authUser, ClassSession $classSession): bool + { + return $authUser->can('Replicate:ClassSession'); + } + + public function reorder(AuthUser $authUser): bool + { + return $authUser->can('Reorder:ClassSession'); + } +} diff --git a/database/seeders/ShieldSeeder.php b/database/seeders/ShieldSeeder.php index 6b96c8b..2b789d3 100644 --- a/database/seeders/ShieldSeeder.php +++ b/database/seeders/ShieldSeeder.php @@ -22,191 +22,251 @@ public function run(): void "name": "Developer", "guard_name": "web", "permissions" : [ - "ViewAny:Student", - "View:Student", - "Create:Student", - "Update:Student", - "Delete:Student", - "Restore:Student", - "ForceDelete:Student", - "ForceDeleteAny:Student", - "RestoreAny:Student", - "Replicate:Student", - "Reorder:Student", - - - "ViewAny:Course", - "View:Course", - "Create:Course", - "Update:Course", - "Delete:Course", - "Restore:Course", - "ForceDelete:Course", - "ForceDeleteAny:Course", - "RestoreAny:Course", - "Replicate:Course", - "Reorder:Course", - - "ViewAny:CourseSchedule", - "View:CourseSchedule", - "Create:CourseSchedule", - "Update:CourseSchedule", - "Delete:CourseSchedule", - "Restore:CourseSchedule", - "ForceDelete:CourseSchedule", - "ForceDeleteAny:CourseSchedule", - "RestoreAny:CourseSchedule", - "Replicate:CourseSchedule", - "Reorder:CourseSchedule", - - "ViewAny:Assignment", - "View:Assignment", "Create:Assignment", - "Update:Assignment", "Delete:Assignment", - "Restore:Assignment", "ForceDelete:Assignment", "ForceDeleteAny:Assignment", - "RestoreAny:Assignment", "Replicate:Assignment", "Reorder:Assignment", + "Restore:Assignment", + "RestoreAny:Assignment", + "Update:Assignment", + "View:Assignment", + "ViewAny:Assignment", - "ViewAny:Attendance", - "View:Attendance", "Create:Attendance", - "Update:Attendance", "Delete:Attendance", - "Restore:Attendance", "ForceDelete:Attendance", "ForceDeleteAny:Attendance", - "RestoreAny:Attendance", "Replicate:Attendance", "Reorder:Attendance", + "Restore:Attendance", + "RestoreAny:Attendance", + "Update:Attendance", + "View:Attendance", + "ViewAny:Attendance", - "ViewAny:Material", - "View:Material", - "Create:Material", - "Update:Material", - "Delete:Material", - "Restore:Material", - "ForceDelete:Material", - "ForceDeleteAny:Material", - "RestoreAny:Material", - "Replicate:Material", - "Reorder:Material", - - "ViewAny:StudyGroup", - "View:StudyGroup", - "Create:StudyGroup", - "Update:StudyGroup", - "Delete:StudyGroup", - "Restore:StudyGroup", - "ForceDelete:StudyGroup", - "ForceDeleteAny:StudyGroup", - "RestoreAny:StudyGroup", - "Replicate:StudyGroup", - "Reorder:StudyGroup", - - "ViewAny:Role", - "View:Role", - "Create:Role", - "Update:Role", - "Delete:Role", - "Restore:Role", - "ForceDelete:Role", - "ForceDeleteAny:Role", - "RestoreAny:Role", - "Replicate:Role", - "Reorder:Role", - - "View:LogTable", - "View:ManageSettings", - - "ViewAny:AttendanceMonitoring", - "View:AttendanceMonitoring", "Create:AttendanceMonitoring", - "Update:AttendanceMonitoring", "Delete:AttendanceMonitoring", - "Restore:AttendanceMonitoring", "ForceDelete:AttendanceMonitoring", "ForceDeleteAny:AttendanceMonitoring", - "RestoreAny:AttendanceMonitoring", "Replicate:AttendanceMonitoring", - "Reorder:AttendanceMonitoring" + "Reorder:AttendanceMonitoring", + "Restore:AttendanceMonitoring", + "RestoreAny:AttendanceMonitoring", + "Update:AttendanceMonitoring", + "View:AttendanceMonitoring", + "ViewAny:AttendanceMonitoring", + + "Create:ClassSession", + "Delete:ClassSession", + "ForceDelete:ClassSession", + "ForceDeleteAny:ClassSession", + "Replicate:ClassSession", + "Reorder:ClassSession", + "Restore:ClassSession", + "RestoreAny:ClassSession", + "Update:ClassSession", + "View:ClassSession", + "ViewAny:ClassSession", + + "Create:Course", + "Delete:Course", + "ForceDelete:Course", + "ForceDeleteAny:Course", + "Replicate:Course", + "Reorder:Course", + "Restore:Course", + "RestoreAny:Course", + "Update:Course", + "View:Course", + "ViewAny:Course", + + "Create:CourseSchedule", + "Delete:CourseSchedule", + "ForceDelete:CourseSchedule", + "ForceDeleteAny:CourseSchedule", + "Replicate:CourseSchedule", + "Reorder:CourseSchedule", + "Restore:CourseSchedule", + "RestoreAny:CourseSchedule", + "Update:CourseSchedule", + "View:CourseSchedule", + "ViewAny:CourseSchedule", + + "View:LogTable", + + "View:ManageSettings", + + "Create:Material", + "Delete:Material", + "ForceDelete:Material", + "ForceDeleteAny:Material", + "Replicate:Material", + "Reorder:Material", + "Restore:Material", + "RestoreAny:Material", + "Update:Material", + "View:Material", + "ViewAny:Material", + + "Create:Role", + "Delete:Role", + "ForceDelete:Role", + "ForceDeleteAny:Role", + "Replicate:Role", + "Reorder:Role", + "Restore:Role", + "RestoreAny:Role", + "Update:Role", + "View:Role", + "ViewAny:Role", + + "Create:Student", + "Delete:Student", + "ForceDelete:Student", + "ForceDeleteAny:Student", + "Replicate:Student", + "Reorder:Student", + "Restore:Student", + "RestoreAny:Student", + "Update:Student", + "View:Student", + "ViewAny:Student", + + "Create:StudyGroup", + "Delete:StudyGroup", + "ForceDelete:StudyGroup", + "ForceDeleteAny:StudyGroup", + "Replicate:StudyGroup", + "Reorder:StudyGroup", + "Restore:StudyGroup", + "RestoreAny:StudyGroup", + "Update:StudyGroup", + "View:StudyGroup", + "ViewAny:StudyGroup" ] }, { "name": "Mahasiswa", "guard_name": "web", "permissions" : [ - "ViewAny:Student", - "View:Student", - - - "ViewAny:Course", - "View:Course", - - "ViewAny:CourseSchedule", - "View:CourseSchedule", - - "ViewAny:Assignment", "View:Assignment", + "ViewAny:Assignment", - "ViewAny:Attendance", "View:Attendance", + "ViewAny:Attendance", + + "View:Course", + "ViewAny:Course", + + "View:CourseSchedule", + "ViewAny:CourseSchedule", - "ViewAny:Material", "View:Material", + "ViewAny:Material", - "ViewAny:StudyGroup", - "View:StudyGroup" + "View:StudyGroup", + "ViewAny:StudyGroup" ] }, { "name": "Kosma", "guard_name": "web", "permissions" : [ - "Create:Student", - "Update:Student", - "Delete:Student", - + "Create:Assignment", + "Delete:Assignment", + "ForceDelete:Assignment", + "ForceDeleteAny:Assignment", + "Restore:Assignment", + "RestoreAny:Assignment", + "Update:Assignment", + "View:Assignment", + "ViewAny:Assignment", + + "Create:Attendance", + "Delete:Attendance", + "ForceDelete:Attendance", + "ForceDeleteAny:Attendance", + "Restore:Attendance", + "RestoreAny:Attendance", + "Update:Attendance", + "View:Attendance", + "ViewAny:Attendance", + + "Create:AttendanceMonitoring", + "Delete:AttendanceMonitoring", + "ForceDelete:AttendanceMonitoring", + "ForceDeleteAny:AttendanceMonitoring", + "Restore:AttendanceMonitoring", + "RestoreAny:AttendanceMonitoring", + "Update:AttendanceMonitoring", + "View:AttendanceMonitoring", + "ViewAny:AttendanceMonitoring", + + "Create:ClassSession", + "Delete:ClassSession", + "ForceDelete:ClassSession", + "ForceDeleteAny:ClassSession", + "Restore:ClassSession", + "RestoreAny:ClassSession", + "Update:ClassSession", + "View:ClassSession", + "ViewAny:ClassSession", "Create:Course", - "Update:Course", "Delete:Course", + "ForceDelete:Course", + "ForceDeleteAny:Course", + "Restore:Course", + "RestoreAny:Course", + "Update:Course", + "View:Course", + "ViewAny:Course", "Create:CourseSchedule", - "Update:CourseSchedule", "Delete:CourseSchedule", - - "Create:Assignment", - "Update:Assignment", - "Delete:Assignment", - - "Create:Material", - "Update:Material", - "Delete:Material", - - "Create:StudyGroup", - "Update:StudyGroup", - "Delete:StudyGroup", + "ForceDelete:CourseSchedule", + "ForceDeleteAny:CourseSchedule", + "Restore:CourseSchedule", + "RestoreAny:CourseSchedule", + "Update:CourseSchedule", + "View:CourseSchedule", + "ViewAny:CourseSchedule", "View:ManageSettings", - "ViewAny:AttendanceMonitoring", - "View:AttendanceMonitoring", - "Create:AttendanceMonitoring", - "Update:AttendanceMonitoring", - "Delete:AttendanceMonitoring", - "Restore:AttendanceMonitoring", - "ForceDelete:AttendanceMonitoring", - "ForceDeleteAny:AttendanceMonitoring", - "RestoreAny:AttendanceMonitoring", - "Replicate:AttendanceMonitoring", - "Reorder:AttendanceMonitoring" + "Create:Material", + "Delete:Material", + "ForceDelete:Material", + "ForceDeleteAny:Material", + "Restore:Material", + "RestoreAny:Material", + "Update:Material", + "View:Material", + "ViewAny:Material", + + "Create:Student", + "Delete:Student", + "ForceDelete:Student", + "ForceDeleteAny:Student", + "Restore:Student", + "RestoreAny:Student", + "Update:Student", + "View:Student", + "ViewAny:Student", + + "Create:StudyGroup", + "Delete:StudyGroup", + "ForceDelete:StudyGroup", + "ForceDeleteAny:StudyGroup", + "Restore:StudyGroup", + "RestoreAny:StudyGroup", + "Update:StudyGroup", + "View:StudyGroup", + "ViewAny:StudyGroup" ] } - ] JSON; $directPermissions = '[]'; @@ -260,11 +320,10 @@ protected static function seedUsers(string $users): void return; } - $userModel = 'App\Models\User'; + $userModel = 'App\\Models\\User'; $tenancyEnabled = false; foreach ($userData as $data) { - // Extract role/permission data before creating user $roles = $data['roles'] ?? []; $permissions = $data['permissions'] ?? []; $tenantRoles = $data['tenant_roles'] ?? []; @@ -276,7 +335,6 @@ protected static function seedUsers(string $users): void $data ); - // Handle tenancy mode - sync roles/permissions per tenant if ($tenancyEnabled && (! empty($tenantRoles) || ! empty($tenantPermissions))) { foreach ($tenantRoles as $tenantId => $roleNames) { $contextId = $tenantId === '_global' ? null : $tenantId; @@ -290,7 +348,6 @@ protected static function seedUsers(string $users): void $user->syncPermissions($permissionNames); } } else { - // Non-tenancy mode if (! empty($roles)) { $user->syncRoles($roles); } @@ -325,7 +382,7 @@ protected static function seedUserTenantPivot(string $pivot): void $uniqueKeys[$tenantForeignKey] = $row[$tenantForeignKey]; } - if (! empty($uniqueKeys)) { + if (! empty($makeRolesWithPermissions)) { DB::table($pivotTable)->updateOrInsert($uniqueKeys, $row); } } @@ -348,7 +405,6 @@ protected static function makeRolesWithPermissions(string $rolesWithPermissions) foreach ($rolePlusPermissions as $rolePlusPermission) { $tenantId = $rolePlusPermission[$teamForeignKey] ?? null; - // Set tenant context for role creation and permission sync if ($tenancyEnabled) { setPermissionsTeamId($tenantId); } @@ -358,7 +414,6 @@ protected static function makeRolesWithPermissions(string $rolesWithPermissions) 'guard_name' => $rolePlusPermission['guard_name'], ]; - // Include tenant ID in role data (can be null for global roles) if ($tenancyEnabled && ! blank($teamForeignKey)) { $roleData[$teamForeignKey] = $tenantId; }