Skip to content

Commit

Permalink
fix: nova 5 fillAttributeFromRequest type conformance (#40)
Browse files Browse the repository at this point in the history
- Fixed type conformance for `Laravel\Nova\Fields\BooleanGroup::fillAttributeFromRequest` used in `PermissionBooleanGroup`, `RoleBooleanGroup`, and `RoleSelect`
  • Loading branch information
kiritokatklian authored Jan 4, 2025
1 parent f1d5ba2 commit 23af107
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 18 deletions.
16 changes: 11 additions & 5 deletions src/PermissionBooleanGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,19 @@ public function __construct($name, $attribute = null, callable $resolveCallback

/**
* @param NovaRequest $request
* @param string $requestAttribute
* @param HasPermissions $model
* @param string $attribute
* @param string $requestAttribute
* @param object $model
* @param string $attribute
*
* @return void
*/
protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
protected function fillAttributeFromRequest(NovaRequest $request, string $requestAttribute, object $model, string $attribute): void
{
if (! $request->exists($requestAttribute)) {
if (!in_array(HasPermissions::class, class_uses_recursive($model))) {
throw new \InvalidArgumentException('The $model parameter of type ' . $model::class . ' must implement ' . HasPermissions::class);
}

if (!$request->exists($requestAttribute)) {
return;
}

Expand Down
18 changes: 12 additions & 6 deletions src/RoleBooleanGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Laravel\Nova\Http\Requests\NovaRequest;
use Spatie\Permission\Models\Role as RoleModel;
use Spatie\Permission\PermissionRegistrar;
use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles;

class RoleBooleanGroup extends BooleanGroup
{
Expand All @@ -35,13 +35,19 @@ public function __construct($name, $attribute = null, callable $resolveCallback

/**
* @param NovaRequest $request
* @param string $requestAttribute
* @param HasPermissions $model
* @param string $attribute
* @param string $requestAttribute
* @param object $model
* @param string $attribute
*
* @return void
*/
protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
protected function fillAttributeFromRequest(NovaRequest $request, string $requestAttribute, object $model, string $attribute): void
{
if (! $request->exists($requestAttribute)) {
if (!in_array(HasRoles::class, class_uses_recursive($model))) {
throw new \InvalidArgumentException('The $model parameter of type ' . $model::class . ' must implement ' . HasRoles::class);
}

if (!$request->exists($requestAttribute)) {
return;
}

Expand Down
20 changes: 13 additions & 7 deletions src/RoleSelect.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Http\Requests\NovaRequest;
use Spatie\Permission\PermissionRegistrar;
use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles;

class RoleSelect extends Select
{
Expand All @@ -32,19 +32,25 @@ public function __construct($name, $attribute = null, callable $resolveCallback

/**
* @param NovaRequest $request
* @param string $requestAttribute
* @param HasPermissions $model
* @param string $attribute
* @param string $requestAttribute
* @param object $model
* @param string $attribute
*
* @return void
*/
protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
protected function fillAttributeFromRequest(NovaRequest $request, string $requestAttribute, object $model, string $attribute): void
{
if (! $request->exists($requestAttribute)) {
if (!in_array(HasRoles::class, class_uses_recursive($model))) {
throw new \InvalidArgumentException('The $model parameter of type ' . $model::class . ' must implement ' . HasRoles::class);
}

if (!$request->exists($requestAttribute)) {
return;
}

$model->syncRoles([]);

if (! is_null($request[$requestAttribute])) {
if (!is_null($request[$requestAttribute])) {
$roleClass = app(PermissionRegistrar::class)->getRoleClass();
$role = $roleClass::where('name', $request[$requestAttribute])->first();
$model->assignRole($role);
Expand Down

0 comments on commit 23af107

Please sign in to comment.