Commit f8d82fd3 authored by Sarun Mungthanya's avatar Sarun Mungthanya
Browse files

add user company role group permission

parent 51f4cd8b
......@@ -62,7 +62,7 @@ return [
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\TabUser::class,
'model' => App\Models\User::class,
],
// 'users' => [
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('company_types', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('company_types');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('companies', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('company_type_id');
$table->foreign('company_type_id')->references('id')->on('company_types')->onDelete('cascade');
$table->string("name", 50);
$table->string("name_en", 50);
$table->longText("address");
$table->string("district");
$table->string("sub_province");
$table->string("province");
$table->string("postcode");
$table->string("contry_code");
$table->string("phone");
$table->string("fax");
$table->string("tax",13);
$table->string("branch");
$table->string("tax_incentive");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('companies');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('groups', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->unsignedBigInteger('company_id');
$table->foreign('company_id')->references('id')->on('companies');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('groups');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('roles');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->string('permission_group_name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('permissions');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('menues', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('menues');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('permission_role', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('permission_id');
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('permission_role');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('menu_role', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('menu_id');
$table->foreign('menu_id')->references('id')->on('menues')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('menu_role');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('group_role', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('group_id');
$table->unsignedBigInteger('role_id');
$table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('group_role');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('group_user', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('group_id');
$table->unsignedBigInteger('user_id');
$table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('group_user');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('companies', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('companies', function (Blueprint $table) {
$table->dropSoftDeletes();
});
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropSoftDeletes();
});
}
};
......@@ -11,7 +11,7 @@ class CompaniesSeeder extends Seeder
public function run()
{
// Define the number of companies you want to generate
$numCompanies = 2;
$numCompanies = 1;
// Generate dummy data for companies
for ($i = 0; $i < $numCompanies; $i++) {
......
......@@ -2,9 +2,12 @@
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use App\Models\User;
use App\Models\Group;
use App\Models\Company;
use App\Models\CompanyType;
class DatabaseSeeder extends Seeder
{
......@@ -15,30 +18,41 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
\App\Models\User::factory()->create([
'name' => 'Test User',
'email' => 'test@example.com',
]);
DB::table('users')->insert([
'name' => 'Piniastudio',
'email' => 'help@piniastudio.com',
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',
]);
DB::table('company_types')->insert(
['name' => 'Sea']
);
DB::table('company_types')->insert(
['name' => 'Air']
);
DB::table('company_types')->insert([
['name' => 'Netbay Admin'],
['name' => 'Broker'],
['name' => 'Importer']
]);
$this->call([
PermissionSeeder::class,
RoleSeeder::class,
CompaniesSeeder::class,
GroupSeeder::class,
]);
\App\Models\User::factory()->create([
'name' => 'Test User',
'email' => 'test@example.com',
'password' => bcrypt('password'),
]);
$users = [
['name' => 'Sarun', 'email' => 'sarun@netbay.co.th', 'password' => bcrypt('password')],
];
foreach ($users as $userData) {
$user = User::create($userData);
// Assign groups to users
$groups = Group::inRandomOrder()->take(2)->get(); // Assign 2 random groups to each user
foreach ($groups as $group) {
$user->groups()->attach($group);
}
}
}
}
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Group;
use App\Models\Role;
use App\Models\Company;
class GroupSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$company = Company::first();
// Create groups
$group1 = Group::create(['name' => 'Group 1', 'company_id' => $company->id]);
$group2 = Group::create(['name' => 'Group 2', 'company_id' => $company->id]);
$group3 = Group::create(['name' => 'Group 3', 'company_id' => $company->id]);
// Assign roles to groups
$this->assignRoles($group1, ['Admin', 'Manager']);
$this->assignRoles($group2, ['Manager', 'User']);
$this->assignRoles($group3, ['User']);
}
private function assignRoles($group, $roles)
{
foreach ($roles as $roleName) {
$role = Role::where('name', $roleName)->first();
if ($role) {
$group->roles()->attach($role);
}
}
}
}
......@@ -16,30 +16,7 @@ class PermissionSeeder extends Seeder
public function run()
{
$permissions = [
// File Management
['name' => 'upload-file', 'description' => 'Upload a file', 'permission_group_name' => 'File Management'],
['name' => 'download-file', 'description' => 'Download a file', 'permission_group_name' => 'File Management'],
// Header Management
['name' => 'add-header', 'description' => 'Add a header', 'permission_group_name' => 'Header Management'],
['name' => 'edit-header', 'description' => 'Edit a header', 'permission_group_name' => 'Header Management'],
['name' => 'delete-header', 'description' => 'Delete a header', 'permission_group_name' => 'Header Management'],
['name' => 'send-customs', 'description' => 'Send customs', 'permission_group_name' => 'Header Management'],
['name' => 'export-to-spn', 'description' => 'Export to SPN', 'permission_group_name' => 'Header Management'],
['name' => 'cancel-header', 'description' => 'Cancel a header', 'permission_group_name' => 'Header Management'],
// Detail Management
['name' => 'add-detail', 'description' => 'Add a detail', 'permission_group_name' => 'Detail Management'],
['name' => 'edit-detail', 'description' => 'Edit a detail', 'permission_group_name' => 'Detail Management'],
['name' => 'cancel-detail', 'description' => 'Cancel a detail', 'permission_group_name' => 'Detail Management'],
['name' => 'merge-vessel', 'description' => 'Merge vessel', 'permission_group_name' => 'Detail Management'],
// Item Management
['name' => 'add-item', 'description' => 'Add an item', 'permission_group_name' => 'Item Management'],
['name' => 'edit-item', 'description' => 'Edit an item', 'permission_group_name' => 'Item Management'],
// Flight Management
['name' => 'change-flight', 'description' => 'Change flight', 'permission_group_name' => 'Flight Management'],
// User Management
['name' => 'add-user', 'description' => 'Add a user', 'permission_group_name' => 'User Management'],
......@@ -64,7 +41,46 @@ class PermissionSeeder extends Seeder
// Company Type Management
['name' => 'add-company-type', 'description' => 'Add a company type', 'permission_group_name' => 'Company Type Management'],
['name' => 'edit-company-type', 'description' => 'Edit a company type', 'permission_group_name' => 'Company Type Management'],
['name' => 'delete-company-type', 'description' => 'Delete a company type', 'permission_group_name' => 'Company Type Management']
['name' => 'delete-company-type', 'description' => 'Delete a company type', 'permission_group_name' => 'Company Type Management'],
// Server License Management
['name' => 'add-server-license', 'description' => 'Add a server license', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-server-license', 'description' => 'Edit a server license', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-csv-mapping', 'description' => 'Edit CSV mapping', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-print-form', 'description' => 'Edit print form', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-user-interface', 'description' => 'Edit user interface', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-global', 'description' => 'Edit global settings', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-parameter', 'description' => 'Edit parameters', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-onload', 'description' => 'Edit on-load settings', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-validate', 'description' => 'Edit validation settings', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-mapto', 'description' => 'Edit mapping', 'permission_group_name' => 'Server License Management'],
['name' => 'edit-mainvar', 'description' => 'Edit main variables', 'permission_group_name' => 'Server License Management'],
['name' => 'download-file-server-license', 'description' => 'Download server license file', 'permission_group_name' => 'Server License Management'],
['name' => 'list-history-patch', 'description' => 'List history patches', 'permission_group_name' => 'Server License Management'],
['name' => 'delete-server-license', 'description' => 'Delete a server license', 'permission_group_name' => 'Server License Management'],
// Patch Management
['name' => 'add-patch', 'description' => 'Add a patch', 'permission_group_name' => 'Patch Management'],
['name' => 'edit-patch', 'description' => 'Edit a patch', 'permission_group_name' => 'Patch Management'],
['name' => 'delete-patch', 'description' => 'Delete a patch', 'permission_group_name' => 'Patch Management'],
// Send Patch Management
['name' => 'send-patch', 'description' => 'Send Patch', 'permission_group_name' => 'Send Patch Management'],
['name' => 'resend-patch', 'description' => 'ReSend Patch', 'permission_group_name' => 'Send Patch Management'],
['name' => 'delete-send-patch', 'description' => 'Delete a Send Patch', 'permission_group_name' => 'Send Patch Management'],
// Parameter Management
['name' => 'add-parameter', 'description' => 'Add a parameter', 'permission_group_name' => 'Parameter Management'],
['name' => 'edit-parameter', 'description' => 'Edit a parameter', 'permission_group_name' => 'Parameter Management'],
['name' => 'delete-parameter', 'description' => 'Delete a parameter', 'permission_group_name' => 'Parameter Management'],
// Patch Exchange Rate Management
['name' => 'add-exchange-rate', 'description' => 'Add a Exchange Rate', 'permission_group_name' => 'Patch Enchangerate Management'],
['name' => 'upload-exchange-rate', 'description' => 'Upload Exchange Rate', 'permission_group_name' => 'Patch Enchangerate Management'],
['name' => 'edit-exchange-rate', 'description' => 'Edit a Exchange Rate', 'permission_group_name' => 'Patch Enchangerate Management'],
['name' => 'delete-exchange-rate', 'description' => 'Delete a Exchange Rate', 'permission_group_name' => 'Patch Enchangerate Management'],
// Discharge Port Management
['name' => 'upload-discharge-port', 'description' => 'Uplaod Discharge Port', 'permission_group_name' => 'Patch Enchangerate Management'],
];
......
......@@ -17,51 +17,51 @@ class RoleSeeder extends Seeder
*/
public function run()
{
// Define permissions for each role
$adminPermissions = [
'add-header', 'edit-header', 'delete-header', 'send-customs', 'export-to-spn',
'cancel-header', 'cancel-detail', 'merge-vessel', 'add-detail', 'edit-detail',
'add-item', 'edit-item', 'download-file', 'change-flight',
$permissions = [
'admin' => [
'add-user', 'edit-user', 'delete-user',
'add-role', 'edit-role', 'delete-role',
'add-group', 'edit-group', 'delete-group',
'add-company', 'edit-company', 'delete-company',
'add-company-type', 'edit-company-type', 'delete-company-type',
'add-server-license', 'edit-server-license', 'edit-csv-mapping', 'edit-print-form',
'edit-user-interface', 'edit-global', 'edit-parameter', 'edit-onload',
'edit-validate', 'edit-mapto', 'edit-mainvar', 'download-file-server-license',
'list-history-patch', 'delete-server-license',
'add-patch', 'edit-patch', 'delete-patch',
'send-patch', 'resend-patch', 'delete-send-patch',
'add-parameter', 'edit-parameter', 'delete-parameter',
'add-exchange-rate', 'upload-exchange-rate', 'edit-exchange-rate', 'delete-exchange-rate',
'upload-discharge-port'
],
'developer' => [
'add-server-license', 'edit-server-license', 'edit-csv-mapping', 'edit-print-form',
'edit-user-interface', 'edit-global', 'edit-parameter', 'edit-onload',
'edit-validate', 'edit-mapto', 'edit-mainvar', 'download-file-server-license',
'add-patch', 'edit-patch', 'delete-patch',
'add-parameter', 'edit-parameter', 'delete-parameter'
],
'sales' => [
'add-company', 'edit-company', 'delete-company',
'add-company-type', 'edit-company-type', 'delete-company-type',
'send-patch'
],
'qa' => [
'add-patch', 'edit-patch', 'delete-patch',
'add-exchange-rate', 'upload-exchange-rate', 'edit-exchange-rate', 'delete-exchange-rate',
'upload-discharge-port'
]
];
$managerPermissions = [
'add-header', 'edit-header', 'delete-header', 'send-customs',
'cancel-header', 'cancel-detail', 'merge-vessel', 'add-detail', 'edit-detail',
'add-item', 'edit-item', 'download-file', 'change-flight',
'add-user', 'edit-user',
'add-group', 'edit-group',
'add-company', 'edit-company',
'add-company-type', 'edit-company-type',
];
$userPermissions = [
'add-header', 'edit-header', 'send-customs',
'cancel-header', 'cancel-detail', 'add-detail', 'edit-detail',
'add-item', 'edit-item', 'download-file',
];
// Create roles
$adminRole = Role::create(['name' => 'Admin', 'description' => 'Administrator']);
$managerRole = Role::create(['name' => 'Manager', 'description' => 'Manager']);
$userRole = Role::create(['name' => 'User', 'description' => 'User']);
// Assign permissions to roles
$this->assignPermissions($adminRole, $adminPermissions);
$this->assignPermissions($managerRole, $managerPermissions);
$this->assignPermissions($userRole, $userPermissions);
}
// Create roles and assign permissions
foreach ($permissions as $roleName => $perms) {
$role = Role::create(['name' => $roleName]);
private function assignPermissions($role, $permissions)
{
foreach ($permissions as $permissionName) {
$permission = Permission::where('name', $permissionName)->first();
foreach ($perms as $perm) {
$permission = Permission::where('name', $perm)->first();
if ($permission) {
$role->permissions()->attach($permission);
$role->permissions()->attach($permission->id);
}
}
}
}
......
<div x-data="{ showModal: @entangle('showNoPermissionModal') }">
<div x-show="showModal" class="fixed z-10 inset-0 overflow-y-auto" aria-labelledby="modal-title" role="dialog" aria-modal="true">
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div x-show="showModal" class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" aria-hidden="true"></div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div x-show="showModal" class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10">
<svg class="h-6 w-6 text-red-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900" id="modal-title">Permission Denied</h3>
<div class="mt-2">
<p class="text-sm text-gray-500">คุณไม่มีสิทธิ์ในการดำเนินการนี้.</p>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button @click="showModal = false" type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
ปิด
</button>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -15,10 +15,14 @@
<div wire:loading.remove class="bg-main-container mx-4">
@if ($currentContent === 'Role')
<livewire:pages.role.role-index />
@elseif ($currentContent === 'ServerLicense')
<livewire:pages.server-license.server-license-index />
@elseif ($currentContent === 'User')
<livewire:pages.user.user-index />
@elseif ($currentContent === 'Company')
<livewire:pages.company.company-index />
@elseif ($currentContent === 'Group')
<livewire:pages.group.group-index />
@elseif ($currentContent === 'ServerLicense')
<livewire:pages.server-license.server-license-index />
@elseif ($currentContent === 'SendPatch')
<livewire:pages.send-patch.send-patch-index />
@elseif ($currentContent === 'SendMultiPatch')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment