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'); } }