feat: add ClassSession policy and update ShieldSeeder permissions for all roles
This commit is contained in:
parent
0b1e3f594c
commit
39cd4ac368
69
app/Policies/ClassSessionPolicy.php
Normal file
69
app/Policies/ClassSessionPolicy.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\ClassSession;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use Illuminate\Foundation\Auth\User as AuthUser;
|
||||
|
||||
class ClassSessionPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
public function viewAny(AuthUser $authUser): bool
|
||||
{
|
||||
return $authUser->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');
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user