Beartropy Permissions

Seeding Example
Here's an example seeder to get you started with roles and permissions.

Permission Naming Convention

We recommend using dot notation for permission names to enable automatic grouping in the UI:

Permission Group Description
users.view users View users
users.create users Create users
posts.edit posts Edit posts
settings.view settings View settings

Example Seeder

Here is a complete seeder example that creates permissions, roles, and assignments:

1<?php
2 
3namespace Database\Seeders;
4 
5use Illuminate\Database\Seeder;
6use Spatie\Permission\Models\Role;
7use Spatie\Permission\Models\Permission;
8use App\Models\User;
9 
10class PermissionsSeeder extends Seeder
11{
12 public function run(): void
13 {
14 // Reset cached roles and permissions
15 app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
16 
17 // Create permissions
18 $permissions = [
19 'users.view', 'users.create', 'users.edit', 'users.delete',
20 'posts.view', 'posts.create', 'posts.edit', 'posts.delete',
21 'settings.view', 'settings.edit',
22 ];
23 
24 foreach ($permissions as $permission) {
25 Permission::firstOrCreate(['name' => $permission, 'guard_name' => 'web']);
26 }
27 
28 // Create roles
29 $admin = Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']);
30 $editor = Role::firstOrCreate(['name' => 'editor', 'guard_name' => 'web']);
31 $viewer = Role::firstOrCreate(['name' => 'viewer', 'guard_name' => 'web']);
32 
33 // Assign permissions to roles
34 $admin->syncPermissions(Permission::all());
35 $editor->syncPermissions([
36 'users.view', 'posts.view', 'posts.create', 'posts.edit'
37 ]);
38 $viewer->syncPermissions([
39 'users.view', 'posts.view', 'settings.view'
40 ]);
41 
42 // Assign roles to users
43 User::first()?->assignRole('admin');
44 }
45}

Running the Seeder

Run the seeder using Artisan:

1php artisan db:seed --class=PermissionsSeeder
Beartropy Logo

© 2026 Beartropy. All rights reserved.

Provided as-is, without warranty. Use at your own risk.