diff --git a/database/migrations/2022_09_23_500023_organization_role_ui_permission.php b/database/migrations/2022_09_23_500023_organization_role_ui_permission.php new file mode 100644 index 000000000..3b4e3c955 --- /dev/null +++ b/database/migrations/2022_09_23_500023_organization_role_ui_permission.php @@ -0,0 +1,30 @@ + OrganizationRoleUiPermissionSeeder::class, + '--force' => true + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/seeds/OrganizationRoleUiPermissionSeeder.php b/database/seeds/OrganizationRoleUiPermissionSeeder.php new file mode 100644 index 000000000..7e0613c20 --- /dev/null +++ b/database/seeds/OrganizationRoleUiPermissionSeeder.php @@ -0,0 +1,168 @@ + "Edit", + "All Independent Activities" => "Edit", + "Export/Import Activities" => "Edit", + "All Projects" => "Edit", + "Import/Export Projects" => "Edit", + "Activity Types" => "Edit", + "Activity Items" => "Edit", + "Manage Users" => "Edit", + "Manage Roles" => "Edit", + "LMS Settings" => "Edit", + "LTI Tools" => "Edit", + "BrightCove" => "Edit", + "Project" => "Edit", + "Playlist" => "Edit", + "Activity" => "Edit", + "Team" => "Edit", + "Independent Activity" => "Edit", + "My Interactive Video" => "None" + ]; + + $courseCreatorUiPermissions = [ + "Organiziation" => "None", + "All Independent Activities" => "None", + "Export/Import Activities" => "None", + "All Projects" => "None", + "Import/Export Projects" => "None", + "Activity Types" => "None", + "Activity Items" => "None", + "Manage Users" => "None", + "Manage Roles" => "None", + "LMS Settings" => "None", + "LTI Tools" => "None", + "BrightCove" => "None", + "Project" => "Edit", + "Playlist" => "Edit", + "Activity" => "Edit", + "Team" => "Edit", + "Independent Activity" => "Edit", + "My Interactive Video" => "None" + ]; + + $memberUiPermissions = [ + "Organiziation" => "None", + "All Independent Activities" => "None", + "Export/Import Activities" => "None", + "All Projects" => "None", + "Import/Export Projects" => "None", + "Activity Types" => "None", + "Activity Items" => "None", + "Manage Users" => "None", + "Manage Roles" => "None", + "LMS Settings" => "None", + "LTI Tools" => "None", + "BrightCove" => "None", + "Project" => "View", + "Playlist" => "View", + "Activity" => "View", + "Team" => "View", + "Independent Activity" => "View", + "My Interactive Video" => "None" + ]; + + $selfRegisteredUiPermissions = [ + "Organiziation" => "None", + "All Independent Activities" => "None", + "Export/Import Activities" => "None", + "All Projects" => "None", + "Import/Export Projects" => "None", + "Activity Types" => "None", + "Activity Items" => "None", + "Manage Users" => "None", + "Manage Roles" => "None", + "LMS Settings" => "None", + "LTI Tools" => "None", + "BrightCove" => "None", + "Project" => "Edit", + "Playlist" => "Edit", + "Activity" => "Edit", + "Team" => "Edit", + "Independent Activity" => "Edit", + "My Interactive Video" => "None" + ]; + + $roleTypes = OrganizationRoleType::whereIn('name', ['admin', 'course_creator', 'member', 'self_registered'])->get(); + $this->uiModules = DB::table('ui_modules')->whereNotNull('parent_id')->pluck('id', 'title'); + + $uiModulePermissionsList = []; + $uiModulePermissionsResult = DB::table('ui_module_permissions')->get(); + + foreach ($uiModulePermissionsResult as $uiModulePermission) { + $uiModulePermissionsList[$uiModulePermission->title][$uiModulePermission->ui_module_id] = $uiModulePermission->id; + } + + $this->uiModulePermissions = $uiModulePermissionsList; + + $this->domain = request()->getHttpHost(); + + return DB::transaction(function () use($roleTypes, $adminUiPermissions, $courseCreatorUiPermissions, $memberUiPermissions, $selfRegisteredUiPermissions) { + foreach ($roleTypes as $roleType) { + if ($roleType->name === 'admin') { + $this->assignPermissions($adminUiPermissions, $roleType); + } else if ($roleType->name === 'course_creator') { + $this->assignPermissions($courseCreatorUiPermissions, $roleType); + } else if ($roleType->name === 'member') { + $this->assignPermissions($memberUiPermissions, $roleType); + } else if ($roleType->name === 'self_registered') { + $this->assignPermissions($selfRegisteredUiPermissions, $roleType); + } + } + }); + } + + function assignPermissions($uiPermissions, $roleType) + { + $uiModulePermissionIds = []; + + foreach ($uiPermissions as $permissionName => $permissionType) { + + if ( + $this->domain === 'currikistudio.org' && + $permissionName === 'Team' && + ($roleType->name === 'course_creator' || $roleType->name === 'self_registered') + ) { + $permissionType = 'View'; + } else if ($this->domain === 'oci.currikistudio.org') { + if ($permissionName === 'Independent Activity') { + $permissionType = 'None'; + } else if ($permissionName === 'My Interactive Video') { + $permissionType = 'View'; + } + } + + if (isset($this->uiModules[$permissionName])) { + $uiPermissionName = $this->uiModules[$permissionName]; + if (isset($this->uiModulePermissions[$permissionType][$uiPermissionName])) { + $uiModulePermissionIds[] = $this->uiModulePermissions[$permissionType][$uiPermissionName]; + } + } + } + + // assign ui role permissions + $roleType->uiModulePermissions()->sync($uiModulePermissionIds); + // assign backend role permissions + $UiOrganizationPermissionMappingRepository = resolve(UiOrganizationPermissionMappingRepositoryInterface::class); + $organizationPermissionTypeIds = $UiOrganizationPermissionMappingRepository->getOrganizationPermissionTypeIds($uiModulePermissionIds); + $roleType->permissions()->sync($organizationPermissionTypeIds); + } +}