Administration
Roles & Permissions
Managing user access with role-based permissions
Lyceum Guardian uses Spatie Laravel Permission for role-based access control. This allows granular control over what each user can access and modify.
Default Roles
Super Admin
- Access: Full system access
- Permissions: ALL permissions
- Use Case: System administrators, owners
Admin
- Access: Day-to-day operations except user management
- Permissions:
- All student operations
- All enrollment operations
- All invoice operations
- All transaction operations
- All credit note operations
- All package operations
- Payment config (view, edit)
- View branches and grades
- Use Case: Operations managers, senior staff
Branch Manager
- Access: Branch-level student and enrollment management
- Permissions:
- Students (view, create, edit)
- Enrollments (view, create, edit)
- Invoices (view only)
- Transactions (view only)
- Packages (view only)
- Use Case: Branch-level administrators
Finance Officer
- Access: All financial operations
- Permissions:
- Students (view only)
- Enrollments (view only)
- Invoices (view, edit, void)
- Transactions (view, create, edit, delete)
- Credit notes (view, create, edit, delete)
- Payment configs (view, edit)
- Use Case: Finance team, accountants
Receptionist
- Access: Front desk enrollment operations
- Permissions:
- Students (view, create)
- Enrollments (view, create)
- Invoices (view only)
- Packages (view only)
- Use Case: Front desk staff
Viewer
- Access: Read-only access
- Permissions: View all resources
- Use Case: Auditors, observers, reporting staff
Permission Categories
Students
view-students- View student list and detailscreate-students- Create new studentsedit-students- Edit student informationdelete-students- Delete students
Enrollments
view-enrollments- View enrollmentscreate-enrollments- Create new enrollmentsedit-enrollments- Edit enrollmentsdelete-enrollments- Delete enrollmentsapprove-enrollments- Approve enrollments
Invoices
view-invoices- View invoicesedit-invoices- Edit invoice detailsdelete-invoices- Delete invoicesvoid-invoices- Void invoices
Transactions
view-transactions- View transactionscreate-transactions- Record transactionsedit-transactions- Edit transactionsdelete-transactions- Delete transactions
Credit Notes
view-credit-notes- View credit notescreate-credit-notes- Create credit notesedit-credit-notes- Edit credit notesdelete-credit-notes- Delete credit notes
Packages
view-packages- View packagescreate-packages- Create packagesedit-packages- Edit packagesdelete-packages- Delete packages
Payment Configs
view-payment-configs- View payment configurationsedit-payment-configs- Edit payment configurations
Users
view-users- View user listcreate-users- Create new usersedit-users- Edit user informationdelete-users- Delete usersassign-roles- Assign roles to users
Managing Roles
Via Admin Panel
- Navigate to Admin → Roles & Permissions
- Create, edit, or delete roles
- Assign permissions to roles
- Navigate to Admin → Users
- Create users and assign roles
Via Code
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
// Create a new role
$role = Role::create(['name' => 'Custom Role']);
// Create a new permission
$permission = Permission::create(['name' => 'custom-permission']);
// Assign permission to role
$role->givePermissionTo('custom-permission');
// Assign role to user
$user->assignRole('Custom Role');Using Permissions
In Controllers/Components
public function mount()
{
if (!auth()->user()->can('view-invoices')) {
abort(403, 'Unauthorized action.');
}
}In Blade Templates
@can('create-students')
<flux:button wire:click="createStudent">
Create Student
</flux:button>
@endcanIn Routes
Route::get('/invoices', InvoiceList::class)
->middleware('can:view-invoices')
->name('invoices.list');Super Admin Bypass
Super Admin role automatically has all permissions through a Gate check:
Gate::before(function ($user, $ability) {
return $user->hasRole('Super Admin') ? true : null;
});Default Super Admin
| Field | Value |
|---|---|
[email protected] | |
| Password | password |
Important: Change these credentials immediately after first login!
Seeding Roles
Run the seeder to create default roles and permissions:
php artisan db:seed --class=RolesAndPermissionsSeederCache Management
Clear permission cache after changes:
php artisan cache:forget spatie.permission.cacheOr in code:
app()[\Spatie\Permission\PermissionRegistrar::class]
->forgetCachedPermissions();Best Practices
- Always check permissions in component
mount()methods - Use @can directives in Blade templates
- Apply middleware to routes for additional protection
- Follow least privilege - give minimum required permissions
- Log permission denials for security auditing
- Regularly review role permissions
Related
- Admin Logs - Track user activities
- Installation - Initial setup