PHP code example of iamgerwin / nova-spatie-role-permission
1. Go to this page and download the library: Download iamgerwin/nova-spatie-role-permission 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/ */
iamgerwin / nova-spatie-role-permission example snippets
// app/Providers/NovaServiceProvider.php
use Iamgerwin\NovaSpatieRolePermission\NovaSpatieRolePermissionTool;
public function tools()
{
return [
new NovaSpatieRolePermissionTool(),
];
}
// app/Nova/User.php
use Laravel\Nova\Fields\MorphToMany;
use Iamgerwin\NovaSpatieRolePermission\Nova\Role;
use Iamgerwin\NovaSpatieRolePermission\Nova\Permission;
public function fields(NovaRequest $request)
{
return [
// ... other fields
MorphToMany::make('Roles', 'roles', Role::class),
MorphToMany::make('Permissions', 'permissions', Permission::class),
];
}
use Iamgerwin\NovaSpatieRolePermission\Fields\RoleBooleanGroup;
use Iamgerwin\NovaSpatieRolePermission\Fields\PermissionBooleanGroup;
public function fields(NovaRequest $request)
{
return [
// ... other fields
RoleBooleanGroup::make('Roles', 'roles')
->options(app(config('permission.models.role'))->pluck('name', 'id')->toArray()),
PermissionBooleanGroup::make('Permissions', 'permissions')
->options(app(config('permission.models.permission'))->pluck('name', 'id')->toArray()),
];
}
use Iamgerwin\NovaSpatieRolePermission\Fields\RoleSelect;
public function fields(NovaRequest $request)
{
return [
// ... other fields
RoleSelect::make('Role', 'role')
->options(app(config('permission.models.role'))->pluck('name', 'id')->toArray())
->displayUsingLabels(),
];
}
use App\Nova\CustomRole;
use App\Nova\CustomPermission;
public function tools()
{
return [
(new NovaSpatieRolePermissionTool())
->roleResource(CustomRole::class)
->permissionResource(CustomPermission::class),
];
}
use App\Policies\CustomRolePolicy;
use App\Policies\CustomPermissionPolicy;
public function tools()
{
return [
(new NovaSpatieRolePermissionTool())
->rolePolicy(CustomRolePolicy::class)
->permissionPolicy(CustomPermissionPolicy::class),
];
}
public function tools()
{
return [
(new NovaSpatieRolePermissionTool())
->roleGuard('admin')
->permissionGuard('api'),
];
}
use Iamgerwin\NovaSpatieRolePermission\Actions\AttachToRole;
public function actions(NovaRequest $request)
{
return [
new AttachToRole,
];
}
// app/Policies/RolePolicy.php
namespace App\Policies;
use App\Models\User;
use Spatie\Permission\Models\Role;
class RolePolicy
{
public function before(User $user, $ability): ?bool
{
// Super admin bypasses all checks
if ($user->hasRole('super-admin')) {
return true;
}
return null;
}
public function viewAny(User $user): bool
{
return $user->hasPermissionTo('view-roles');
}
public function create(User $user): bool
{
return $user->hasPermissionTo('create-roles');
}
// ... other methods
}
public function tools()
{
return [
(new NovaSpatieRolePermissionTool())
->rolePolicy(App\Policies\RolePolicy::class)
->permissionPolicy(App\Policies\PermissionPolicy::class),
];
}
// Check in tinker
php artisan tinker
>>> User::find(1)->hasPermissionTo('manage-roles')