61 lines
1.5 KiB
PHP
61 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\User\Services;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
class RoleService
|
|
{
|
|
|
|
public function getRoles(Request $request)
|
|
{
|
|
$query = Role::query();
|
|
return $query->get();
|
|
}
|
|
|
|
public function storeRole(array $roleData, array $permissionIds): Role
|
|
{
|
|
return DB::transaction(function () use ($roleData, $permissionIds) {
|
|
$role = Role::create($roleData);
|
|
$role->permissions()->attach($permissionIds);
|
|
return $role;
|
|
});
|
|
}
|
|
|
|
public function getRoleById(int $id)
|
|
{
|
|
return Role::findOrFail($id);
|
|
}
|
|
|
|
public function updateRole(int $id, array $roleData, array $permissionIds)
|
|
{
|
|
$role = self::getRoleById($id);
|
|
|
|
return DB::transaction(function () use ($role, $roleData, $permissionIds) {
|
|
$role->update($roleData);
|
|
$role->permissions()->sync($permissionIds);
|
|
return $role;
|
|
});
|
|
}
|
|
|
|
public function deleteRole(int $id)
|
|
{
|
|
return DB::transaction(function () use ($id) {
|
|
$role = self::getRoleById($id);
|
|
$role->permissions()->detach();
|
|
$role->delete();
|
|
return true;
|
|
});
|
|
}
|
|
|
|
public static function pluck(callable $query = null)
|
|
{
|
|
$baseQuery = Role::query();
|
|
if (is_callable($query)) {
|
|
$query($baseQuery);
|
|
}
|
|
return $baseQuery->pluck('name', 'id');
|
|
}
|
|
}
|