1. Go to this page and download the library: Download ferdiunal/nova-shield library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ferdiunal / nova-shield example snippets
return [
"resources" => [
// Nova resources folder path
app_path("Nova"),
// Or a string class path
\Ferdiunal\NovaShield\Http\Nova\ShieldResource::class,
// Custom resource: For custom menu items
// [
// "name" => "Custom Menu Item",
// "policies" => ['CustomMenuPolicy'] // Add custom menu policies here
// ]
],
"policies" => [
// List of policies for the resources
"viewAny",
"view",
"create",
"update",
"replicate",
"delete",
"restore",
"forceDelete",
"runAction",
"runDestructiveAction",
"canImpersonate",
"canBeImpersonated",
"add{Model}",
"attach{Model}",
"attachAny{Model}",
"detach{Model}",
],
];
// app/Providers/NovaServiceProvider.php
Nova::mainMenu(function (Request $request) {
return [
MenuItem::make('Custom Menu Item')
->path('/custom-menu')
->canSee(
function ($request) {
return $request->user()->can('CustomMenuPolicy');
}
)
];
});
// ----
// config/nova-shield.php
return [
"resources" => [
...
// Custom resource: For custom menu items
[
"name" => "Custom Menu Item",
"prefix" => "customMenuItem::",
"policies" => ['CustomMenuPolicy'] // Add custom menu policies here
]
]
];
namespace App\Nova;
use Ferdiunal\NovaShield\PermissionAuthorizable;
use Laravel\Nova\Resource as NovaResource;
abstract class Resource extends NovaResource
{
use PermissionAuthorizable;
....
}
// App\Models\User
use Ferdiunal\NovaShield\Contracts\HasShieldTeam;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements HasShieldTeam
{
public function getTeamIdAttribute(): mixed
{
// return $this->team_id
}
}
namespace App\Lib;
use Ferdiunal\NovaShield\Lib\NovaTeamHelperField;
use Laravel\Nova\Fields\Field;
use Laravel\Nova\Fields\Select;
class TeamField extends NovaTeamHelperField
{
public static function field(): Field
{
return Select::make('Teams', 'team_id')
->options([])
->displayUsingLabels()
->searchable()
->sortable();
}
}
return [
/*
|--------------------------------------------------------------------------
| Nova Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be assigned to every Nova route, giving you the
| chance to add your own middleware to this stack or override any of
| the existing middleware. Or, you can just stick with this stack.
|
*/
'middleware' => [
....
\Ferdiunal\NovaShield\Http\Middleware\TeamMiddleware::class,
],
];