Skip to content

Commit

Permalink
add roles integration
Browse files Browse the repository at this point in the history
  • Loading branch information
3x1io committed Dec 11, 2023
1 parent a0876c7 commit 7b907ec
Show file tree
Hide file tree
Showing 3 changed files with 450 additions and 0 deletions.
150 changes: 150 additions & 0 deletions database/migrations/2023_12_11_152921_fill_permissions_for_coupons.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
<?php

use Carbon\Carbon;
use Illuminate\Config\Repository;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
/**
* @var Repository|mixed
*/
protected $guardName;
/**
* @var array
*/
protected $permissions;
/**
* @var array
*/
protected $roles;

/**
* FillPermissionsForPayment constructor.
*/
public function __construct()
{
$this->guardName = config('tomato-roles.defaults.guard');

$permissions = collect([
"admin.coupons.index",
"admin.coupons.api",
"admin.coupons.create",
"admin.coupons.store",
"admin.coupons.show",
"admin.coupons.edit",
"admin.coupons.update",
"admin.coupons.destroy",
"admin.coupons.export",
"admin.coupons.bulk",

]);

//Add New permissions
$this->permissions = $permissions->map(function ($permission) {
return [
'name' => $permission,
'guard_name' => $this->guardName,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
];
})->toArray();

//Role should already exists
$this->roles = [
[
'name' => 'admin',
'guard_name' => $this->guardName,
'permissions' => $permissions,
],
];
}

/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
$tableNames = config('permission.table_names', [
'roles' => 'roles',
'permissions' => 'permissions',
'model_has_permissions' => 'model_has_permissions',
'model_has_roles' => 'model_has_roles',
'role_has_permissions' => 'role_has_permissions',
]);

DB::transaction(function () use($tableNames) {
foreach ($this->permissions as $permission) {
$permissionItem = DB::table($tableNames['permissions'])->where([
'name' => $permission['name'],
'guard_name' => $permission['guard_name']
])->first();
if ($permissionItem === null) {
DB::table($tableNames['permissions'])->insert($permission);
}
}

foreach ($this->roles as $role) {
$permissions = $role['permissions'];
unset($role['permissions']);

$roleItem = DB::table($tableNames['roles'])->where([
'name' => $role['name'],
'guard_name' => $role['guard_name']
])->first();
if ($roleItem !== null) {
$roleId = $roleItem->id;

$permissionItems = DB::table($tableNames['permissions'])->whereIn('name', $permissions)->where(
'guard_name',
$role['guard_name']
)->get();
foreach ($permissionItems as $permissionItem) {
$roleHasPermissionData = [
'permission_id' => $permissionItem->id,
'role_id' => $roleId
];
$roleHasPermissionItem = DB::table($tableNames['role_has_permissions'])->where($roleHasPermissionData)->first();
if ($roleHasPermissionItem === null) {
DB::table($tableNames['role_has_permissions'])->insert($roleHasPermissionData);
}
}
}
}
});
app()['cache']->forget(config('permission.cache.key'));
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
$tableNames = config('permission.table_names', [
'roles' => 'roles',
'permissions' => 'permissions',
'model_has_permissions' => 'model_has_permissions',
'model_has_roles' => 'model_has_roles',
'role_has_permissions' => 'role_has_permissions',
]);

DB::transaction(function () use ($tableNames){
foreach ($this->permissions as $permission) {
$permissionItem = DB::table($tableNames['permissions'])->where([
'name' => $permission['name'],
'guard_name' => $permission['guard_name']
])->first();
if ($permissionItem !== null) {
DB::table($tableNames['permissions'])->where('id', $permissionItem->id)->delete();
DB::table($tableNames['model_has_permissions'])->where('permission_id', $permissionItem->id)->delete();
}
}
});
app()['cache']->forget(config('permission.cache.key'));
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
<?php

use Carbon\Carbon;
use Illuminate\Config\Repository;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
/**
* @var Repository|mixed
*/
protected $guardName;
/**
* @var array
*/
protected $permissions;
/**
* @var array
*/
protected $roles;

/**
* FillPermissionsForPayment constructor.
*/
public function __construct()
{
$this->guardName = config('tomato-roles.defaults.guard');

$permissions = collect([
"admin.gift-cards.index",
"admin.gift-cards.api",
"admin.gift-cards.create",
"admin.gift-cards.store",
"admin.gift-cards.show",
"admin.gift-cards.edit",
"admin.gift-cards.update",
"admin.gift-cards.destroy",
"admin.gift-cards.export",
"admin.gift-cards.bulk",

]);

//Add New permissions
$this->permissions = $permissions->map(function ($permission) {
return [
'name' => $permission,
'guard_name' => $this->guardName,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
];
})->toArray();

//Role should already exists
$this->roles = [
[
'name' => 'admin',
'guard_name' => $this->guardName,
'permissions' => $permissions,
],
];
}

/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
$tableNames = config('permission.table_names', [
'roles' => 'roles',
'permissions' => 'permissions',
'model_has_permissions' => 'model_has_permissions',
'model_has_roles' => 'model_has_roles',
'role_has_permissions' => 'role_has_permissions',
]);

DB::transaction(function () use($tableNames) {
foreach ($this->permissions as $permission) {
$permissionItem = DB::table($tableNames['permissions'])->where([
'name' => $permission['name'],
'guard_name' => $permission['guard_name']
])->first();
if ($permissionItem === null) {
DB::table($tableNames['permissions'])->insert($permission);
}
}

foreach ($this->roles as $role) {
$permissions = $role['permissions'];
unset($role['permissions']);

$roleItem = DB::table($tableNames['roles'])->where([
'name' => $role['name'],
'guard_name' => $role['guard_name']
])->first();
if ($roleItem !== null) {
$roleId = $roleItem->id;

$permissionItems = DB::table($tableNames['permissions'])->whereIn('name', $permissions)->where(
'guard_name',
$role['guard_name']
)->get();
foreach ($permissionItems as $permissionItem) {
$roleHasPermissionData = [
'permission_id' => $permissionItem->id,
'role_id' => $roleId
];
$roleHasPermissionItem = DB::table($tableNames['role_has_permissions'])->where($roleHasPermissionData)->first();
if ($roleHasPermissionItem === null) {
DB::table($tableNames['role_has_permissions'])->insert($roleHasPermissionData);
}
}
}
}
});
app()['cache']->forget(config('permission.cache.key'));
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
$tableNames = config('permission.table_names', [
'roles' => 'roles',
'permissions' => 'permissions',
'model_has_permissions' => 'model_has_permissions',
'model_has_roles' => 'model_has_roles',
'role_has_permissions' => 'role_has_permissions',
]);

DB::transaction(function () use ($tableNames){
foreach ($this->permissions as $permission) {
$permissionItem = DB::table($tableNames['permissions'])->where([
'name' => $permission['name'],
'guard_name' => $permission['guard_name']
])->first();
if ($permissionItem !== null) {
DB::table($tableNames['permissions'])->where('id', $permissionItem->id)->delete();
DB::table($tableNames['model_has_permissions'])->where('permission_id', $permissionItem->id)->delete();
}
}
});
app()['cache']->forget(config('permission.cache.key'));
}
};
Loading

0 comments on commit 7b907ec

Please sign in to comment.