Configuration
Permissions are configured inconfig/permission.php.
Models
Custom permission models extend Spatie’s base models:Caching
Permissions are cached for 24 hours for performance:Available Roles
Roles are defined inapp/Enums/Auth/Role.php with priorities and colors:
Admin
- Priority: 250,000
- Color: #1F8B4C (Green)
- Description: Full system access with all permissions
Encoder
- Priority: 150,000
- Color: #FFC107 (Amber)
- Description: Manage video encoding and processing
Developer
- Priority: 125,000
- Color: #FF69B4 (Pink)
- Description: API access and development features
- Special Permissions:
view filament
Content Moderator
- Priority: 100,000
- Color: #2E5A88 (Blue)
- Description: Moderate wiki content and user submissions
Patron
- Priority: 75,000
- Color: #E74C3C (Red)
- Description: Supporter perks and features
Contributor
- Priority: 50,000
- Color: #052C41 (Dark Blue)
- Description: Contribute wiki content
Panel Viewer
- Priority: 25,000
- Color: #2596D1 (Light Blue)
- Description: View-only access to admin panel
Verified
- Priority: 0
- Description: Basic verified user status
Permission Types
CRUD Permissions
Standard create, read, update, delete operations (app/Enums/Auth/CrudPermission.php):view- View resourcescreate- Create new resourcesupdate- Modify existing resourcesdelete- Soft delete resources
Extended CRUD Permissions
Additional operations for soft-deletable resources:restore- Restore soft-deleted resourcesforce delete- Permanently delete resources
Special Permissions
Defined inapp/Enums/Auth/SpecialPermission.php:
API & Rate Limiting
bypass api rate limiter- Bypass API rate limitsbypass graphql rate limiter- Bypass GraphQL rate limits
Authorization
bypass authorization- Bypass all authorization checksbypass feature flags- Access features behind feature flags
Panel Access
view filament- Access Filament admin panelview horizon- Access Laravel Horizon dashboardview pulse- Access Laravel Pulse monitoring
User Actions
make submission- Submit wiki content for reviewrevalidate pages- Trigger page cache revalidation
Permission Format
Permissions follow the pattern:{action} {resource}
Example permissions (from database/seeders/Auth/Permission/PermissionSeeder.php):
view anime- View anime resourcescreate video- Create video resourcesupdate artist- Modify artist resourcesdelete song- Delete song resourcesforce delete user- Permanently delete users
Using Permissions
Checking Permissions in Code
TheUser model uses the HasRoles trait (app/Models/Auth/User.php:71):
Check User Permissions
Check User Roles
Using Laravel Gates
Example fromPermissionPolicy (app/Policies/Auth/PermissionPolicy.php:20):
Filament Panel Access
FromUser model (app/Models/Auth/User.php:180):
- Email must be verified
- User must have
view filamentpermission - OR user has
bypass authorizationpermission
Permission Seeding
Permissions are seeded for all major resources (database/seeders/Auth/Permission/PermissionSeeder.php:54):Admin Resources
- Announcements
- Database dumps
- Features
- Featured themes
Auth Resources
- Permissions (view only)
- Roles (full CRUD)
- Users (extended CRUD)
- Sanctions (full CRUD)
Wiki Resources
- Anime (extended CRUD)
- Artists (extended CRUD)
- Songs (extended CRUD)
- Videos (extended CRUD)
- Images (extended CRUD)
- And many more…
List Resources
- Playlists (full CRUD)
- External profiles (full CRUD)
User Resources
- Likes (full CRUD)
- Notifications (full CRUD)
- Submissions (full CRUD)
Role Permissions Example
FromDeveloperRoleSeeder (database/seeders/Auth/Role/DeveloperRoleSeeder.php:47):
Middleware
Permissions can be enforced via middleware:Database Schema
The permission system uses several tables:permissions- Available permissionsroles- Available roles with priority and colormodel_has_permissions- Direct user permissionsmodel_has_roles- User role assignmentsrole_has_permissions- Permissions assigned to roles
Best Practices
Assign Permissions to Roles
Prefer assigning permissions to roles rather than directly to users:Check Permissions, Not Roles
In policies and gates, check permissions rather than roles:Use Policy Classes
Define authorization logic in policy classes for cleaner code and better organization.Next Steps
- Authentication Overview - Understanding authentication flow
- Laravel Sanctum - API token authentication
- Spatie Permission Docs - Official package documentation