-- inject Laravel\Nova\Resource via Constructor:
class DefaultPolicy
{
protected $resource;
public function __construct(Resource $resource)
{
$this->resource = $resource;
}
public function before(User $user, string $ability, $model)
{
$modelClass = $this->resource::newModel()->getMorphClass();
// ... continue with authorization logic
}
}
-- create a custom trait extending Authorizable:
trait CustomAuthorizable
{
protected function callPolicyBefore(User $user, string $ability, $model = null)
{
$modelClass = $model ? get_class($model) : $this->resource::newModel()->getMorphClass();
return call_user_func([$this->policy, 'before'], $user, $ability, $modelClass);
}
}
-- create a middleware or use controller-level authorization:
public function update(Request $request, $modelId)
{
$model = Model::findOrFail($modelId);
if (!Gate::allows('update', $model)) {
// ... return unauthorized response
}
// ... rest of the update logic
}