singleloginsystem/app/Services/AppsPermissionService.php
= 562b4a220d Fix: Associate App Permission with Roles
- 'Use' permission of apps now synced with Role
- Added `PermissionData` DTO for standardized permission transformation.
- Expanded `AppsPermissionService` with `getAllPermissions` method for retrieving connected app permissions.
- Updated `AppRoleService` with methods for assigning and revoking app permissions to roles (`assignAppPermissionsRole`, `removeAppPermissionsRole`).
- Introduced `AppPermission::type` method for extracting permission type from names.
- Refined role and app interaction logic, including proper slug generation and app-role association.
2026-05-20 09:06:55 +00:00

51 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Services;
use App\Data\ConnectedApp\ConnectedAppData;
use App\Data\Permissions\PermissionData;
use App\Enums\ConnectedAppPermissonEnum;
use App\Helpers\AppPermission;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Spatie\LaravelData\DataCollection;
use Spatie\Permission\Models\Permission;
use Throwable;
class AppsPermissionService
{
/**
* Creates a new permission for the connected app.
*
* @throws Throwable
*/
public function add(ConnectedAppData $connectedApp, ConnectedAppPermissonEnum $permission): void
{
if (! $connectedApp->slug) {
$connectedApp->slug = Str::slug($connectedApp->name);
}
$permissionName = AppPermission::name($permission, $connectedApp);
DB::transaction(function () use ($permissionName): void {
Permission::firstOrCreate(['name' => $permissionName]);
});
}
/**
* Returns all permissions for the connected app.
*
* @return DataCollection<int, PermissionData>
*/
public function getAllPermissions(ConnectedAppData $connectedApp): DataCollection
{
if (! $connectedApp->slug) {
$connectedApp->slug = Str::slug($connectedApp->name);
}
$permissionName = AppPermission::name(ConnectedAppPermissonEnum::Use, $connectedApp);
$permissions = Permission::where('name', 'like', $permissionName)->get();
return PermissionData::collect($permissions, DataCollection::class);
}
}