dress/database/seeders/RolePermissionSeeder.php

174 lines
7.5 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RolePermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Permissions Dashboard
Permission::firstOrCreate(['name' => 'View:Dashboard', 'guard_name' => 'web']);
// Permissions Analysis
Permission::firstOrCreate(['name' => 'View:Analysis', 'guard_name' => 'web']);
// Permissions User
Permission::firstOrCreate(['name' => 'View:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'ResetPassword:User', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'ToggleStatus:User', 'guard_name' => 'web']);
// Permissions Category
Permission::firstOrCreate(['name' => 'View:Category', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Category', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Category', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Category', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Category', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'ToggleStatus:Category', 'guard_name' => 'web']);
// Permissions Product
Permission::firstOrCreate(['name' => 'View:Product', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Product', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Product', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Product', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Product', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'ToggleStatus:Product', 'guard_name' => 'web']);
// Permissions Order
Permission::firstOrCreate(['name' => 'View:Order', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Order', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Order', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Order', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Order', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Print:Order', 'guard_name' => 'web']);
// Permissions Expense
Permission::firstOrCreate(['name' => 'View:Expense', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Expense', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Expense', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Expense', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Expense', 'guard_name' => 'web']);
// Permissions Purchase
Permission::firstOrCreate(['name' => 'View:Purchase', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Purchase', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Purchase', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Purchase', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Purchase', 'guard_name' => 'web']);
// Permissions Payroll
Permission::firstOrCreate(['name' => 'View:Payroll', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Generate:Payroll', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Payroll', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'DeleteAny:Payroll', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Pay:Payroll', 'guard_name' => 'web']);
// Permissions PayrollAdjustment
Permission::firstOrCreate(['name' => 'View:PayrollAdjustment', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:PayrollAdjustment', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:PayrollAdjustment', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:PayrollAdjustment', 'guard_name' => 'web']);
// Permissions General Setting
Permission::firstOrCreate(['name' => 'View:Setting', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Setting', 'guard_name' => 'web']);
// Permissions Role
Permission::firstOrCreate(['name' => 'View:Role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Create:Role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Edit:Role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'Delete:Role', 'guard_name' => 'web']);
// Permissions Log
Permission::firstOrCreate(['name' => 'View:Log', 'guard_name' => 'web']);
// Permissions Activity
Permission::firstOrCreate(['name' => 'View:Activity', 'guard_name' => 'web']);
// Create Roles
$developer = Role::firstOrCreate(['name' => 'Developer', 'guard_name' => 'web']);
$owner = Role::firstOrCreate(['name' => 'Owner', 'guard_name' => 'web']);
$admin = Role::firstOrCreate(['name' => 'Admin', 'guard_name' => 'web']);
// Assign permissions to Developer (All Permissions)
$allPermissions = Permission::all();
$developer->syncPermissions($allPermissions);
// Assign permissions to Owner (All except View:Log)
$ownerPermissions = Permission::whereNotIn('name', [
'View:Log',
'View:Role',
'Create:Role',
'Edit:Role',
'Delete:Role',
])->get();
$owner->syncPermissions($ownerPermissions);
// Assign permissions to Admin
// Admin gets everything except deleting users and settings
$adminPermissions = Permission::whereNotIn('name', [
'View:Analysis',
'View:User',
'Create:User',
'Edit:User',
'Delete:User',
'DeleteAny:User',
'ResetPassword:User',
'ToggleStatus:User',
'Create:Category',
'Edit:Category',
'Delete:Category',
'DeleteAny:Category',
'ToggleStatus:Category',
'Create:Product',
'Edit:Product',
'Delete:Product',
'DeleteAny:Product',
'ToggleStatus:Product',
'View:Purchase',
'Create:Purchase',
'Edit:Purchase',
'Delete:Purchase',
'DeleteAny:Purchase',
'Generate:Payroll',
'Delete:Payroll',
'DeleteAny:Payroll',
'Pay:Payroll',
'Create:PayrollAdjustment',
'Edit:PayrollAdjustment',
'Delete:PayrollAdjustment',
'DeleteAny:PayrollAdjustment',
'View:Setting',
'Edit:Setting',
'View:Role',
'Create:Role',
'Edit:Role',
'Delete:Role',
'View:Log',
'View:Activity',
])->get();
$admin->syncPermissions($adminPermissions);
}
}