133 lines
4.3 KiB
PHP
133 lines
4.3 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Database\Seeders;
|
||
|
|
|
||
|
|
use App\Models\User;
|
||
|
|
use Illuminate\Database\Seeder;
|
||
|
|
use Spatie\Permission\Models\Role;
|
||
|
|
use Spatie\Permission\Models\Permission;
|
||
|
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||
|
|
|
||
|
|
class PermissionSeeder extends Seeder
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Run the database seeds.
|
||
|
|
*
|
||
|
|
* @return void
|
||
|
|
*/
|
||
|
|
public function run()
|
||
|
|
{
|
||
|
|
$rolesStructure = [
|
||
|
|
'Super Admin' => [
|
||
|
|
'dashboard' => 'r',
|
||
|
|
'users' => 'r,c,u,d',
|
||
|
|
'banners' => 'r,c,u,d',
|
||
|
|
'business' => 'r,c,u,d',
|
||
|
|
'addons' => 'r,c',
|
||
|
|
'business-categories' => 'r,c,u,d',
|
||
|
|
'plans' => 'r,c,u,d',
|
||
|
|
'subscription-reports' => 'r',
|
||
|
|
'subscription-orders' => 'r',
|
||
|
|
'features' => 'r,c,u,d',
|
||
|
|
'domains' => 'r,c,u,d',
|
||
|
|
'interfaces' => 'r,c,u,d',
|
||
|
|
'testimonials' => 'r,c,u,d',
|
||
|
|
'blogs' => 'r,c,u,d',
|
||
|
|
'messages' => 'r,c,u,d',
|
||
|
|
'terms' => 'r,u',
|
||
|
|
'gateways' => 'r,u',
|
||
|
|
'currencies' => 'r,c,u,d',
|
||
|
|
'settings' => 'r,u',
|
||
|
|
'roles' => 'r,c,u,d',
|
||
|
|
'permissions' => 'r,c',
|
||
|
|
'notifications' => 'r,u',
|
||
|
|
],
|
||
|
|
|
||
|
|
'Admin' => [
|
||
|
|
'dashboard' => 'r',
|
||
|
|
'users' => 'r,c,u,d',
|
||
|
|
'banners' => 'r,c,u,d',
|
||
|
|
'business' => 'r,c,u,d',
|
||
|
|
'addons' => 'r,c',
|
||
|
|
'business-categories' => 'r,c,u,d',
|
||
|
|
'plans' => 'r,c,u,d',
|
||
|
|
'domains' => 'r,c,u,d',
|
||
|
|
'subscription-reports' => 'r',
|
||
|
|
'features' => 'r,c,u,d',
|
||
|
|
'interfaces' => 'r,c,u,d',
|
||
|
|
'testimonials' => 'r,c,u,d',
|
||
|
|
'blogs' => 'r,c,u,d',
|
||
|
|
'messages' => 'r,c,u,d',
|
||
|
|
'terms' => 'r,u',
|
||
|
|
'currencies' => 'r,c,u,d',
|
||
|
|
],
|
||
|
|
|
||
|
|
'Manager' => [
|
||
|
|
'dashboard' => 'r',
|
||
|
|
'banners' => 'r,c,u,d',
|
||
|
|
'business-categories' => 'r,c,u,d',
|
||
|
|
'plans' => 'r,c,u,d',
|
||
|
|
'subscription-reports' => 'r',
|
||
|
|
'features' => 'r,c,u,d',
|
||
|
|
'interfaces' => 'r,c,u,d',
|
||
|
|
'testimonials' => 'r,c,u,d',
|
||
|
|
'blogs' => 'r,c,u,d',
|
||
|
|
'messages' => 'r,c,u,d',
|
||
|
|
'terms' => 'r,u',
|
||
|
|
]
|
||
|
|
];
|
||
|
|
|
||
|
|
foreach ($rolesStructure as $key => $modules) {
|
||
|
|
// Create a new role
|
||
|
|
$role = Role::firstOrCreate([
|
||
|
|
'name' => str($key)->remove(' ')->lower(),
|
||
|
|
'guard_name' => 'web'
|
||
|
|
]);
|
||
|
|
$permissions = [];
|
||
|
|
|
||
|
|
$this->command->info('Creating Role ' . strtoupper($key));
|
||
|
|
|
||
|
|
// Reading role permission modules
|
||
|
|
foreach ($modules as $module => $value) {
|
||
|
|
|
||
|
|
foreach (explode(',', $value) as $perm) {
|
||
|
|
|
||
|
|
$permissionValue = $this->permissionMap()->get($perm);
|
||
|
|
|
||
|
|
$permissions[] = Permission::firstOrCreate([
|
||
|
|
'name' => $module . '-' . $permissionValue,
|
||
|
|
'guard_name' => 'web'
|
||
|
|
])->id;
|
||
|
|
|
||
|
|
$this->command->info('Creating Permission to ' . $permissionValue . ' for ' . $module);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Attach all permissions to the role
|
||
|
|
$role->permissions()->sync($permissions);
|
||
|
|
|
||
|
|
$this->command->info("Creating '{$key}' user");
|
||
|
|
// Create default user for each role
|
||
|
|
$user = User::create([
|
||
|
|
'role' => str($key)->remove(' ')->lower(),
|
||
|
|
'name' => ucwords(str_replace('_', ' ', $key)),
|
||
|
|
'password' => bcrypt(str($key)->remove(' ')->lower()),
|
||
|
|
'email' => str($key)->remove(' ')->lower() . '@' . str($key)->remove(' ')->lower() . '.com',
|
||
|
|
'image' => 'assets/images/profile/' . str($key)->remove(' ')->lower() . '.png',
|
||
|
|
]);
|
||
|
|
|
||
|
|
$user->assignRole($role);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private function permissionMap()
|
||
|
|
{
|
||
|
|
return collect([
|
||
|
|
'c' => 'create',
|
||
|
|
'r' => 'read',
|
||
|
|
'u' => 'update',
|
||
|
|
'd' => 'delete',
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|