update patch 1
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Backend;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AdminRequest;
|
||||
use App\Models\Admin;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class AdminsController extends Controller
|
||||
{
|
||||
|
||||
public function index(): Renderable
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.view']);
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'User Access List',
|
||||
'sub_title' => 'List User Access System',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view('backend.pages.admins.index', [
|
||||
'admins' => Admin::all(),
|
||||
'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(): Renderable
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.create']);
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'Create User Access',
|
||||
'sub_title' => 'Create new User',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view('backend.pages.admins.create', [
|
||||
'roles' => Role::all(),
|
||||
'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(AdminRequest $request): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.create']);
|
||||
|
||||
$admin = new Admin();
|
||||
$admin->name = $request->name;
|
||||
$admin->password = Hash::make($request->password);
|
||||
$admin->username = $request->username;
|
||||
$admin->email = $request->email;
|
||||
$admin->save();
|
||||
|
||||
if ($request->roles) {
|
||||
$admin->assignRole($request->roles);
|
||||
}
|
||||
|
||||
session()->flash('success', __('Admin has been created.'));
|
||||
return redirect()->route('admin.admins.index');
|
||||
}
|
||||
|
||||
public function edit(int $id): Renderable
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.edit']);
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'Edit User Access',
|
||||
'sub_title' => 'Update User Access data',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
|
||||
$admin = Admin::findOrFail($id);
|
||||
return view('backend.pages.admins.edit', [
|
||||
'admin' => $admin,
|
||||
'roles' => Role::all(),
|
||||
'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(AdminRequest $request, int $id): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.edit']);
|
||||
|
||||
$admin = Admin::findOrFail($id);
|
||||
$admin->name = $request->name;
|
||||
$admin->email = $request->email;
|
||||
$admin->username = $request->username;
|
||||
|
||||
if ($request->password) {
|
||||
$admin->password = Hash::make($request->password);
|
||||
}
|
||||
$admin->save();
|
||||
$admin->roles()->detach();
|
||||
if ($request->roles) {
|
||||
$admin->assignRole($request->roles);
|
||||
}
|
||||
|
||||
session()->flash('success', 'Admin has been updated.');
|
||||
return back();
|
||||
}
|
||||
|
||||
public function destroy(int $id): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['admin.delete']);
|
||||
|
||||
$admin = Admin::findOrFail($id);
|
||||
$admin->delete();
|
||||
session()->flash('success', 'Admin has been deleted.');
|
||||
return back();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Backend\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\ConfirmsPasswords;
|
||||
|
||||
class ConfirmPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Confirm Password Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password confirmations and
|
||||
| uses a simple trait to include the behavior. You're free to explore
|
||||
| this trait and override any functions that require customization.
|
||||
|
|
||||
*/
|
||||
|
||||
use ConfirmsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users when the intended url fails.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Backend\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Backend\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Exception;
|
||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles authenticating users for the application and
|
||||
| redirecting them to your home screen. The controller uses a trait
|
||||
| to conveniently provide its functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo;
|
||||
|
||||
/**
|
||||
* show login form for admin guard
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function showLoginForm()
|
||||
{
|
||||
return view('backend.auth.login');
|
||||
}
|
||||
|
||||
|
||||
protected function redirectTo()
|
||||
{
|
||||
if (Auth::guard('admin')->check()) {
|
||||
// Redirect admins to their dashboard
|
||||
return RouteServiceProvider::ADMIN_DASHBOARD;
|
||||
}
|
||||
|
||||
if (Auth::guard('web')->check()) {
|
||||
// Redirect users to the home page
|
||||
return redirect()->route('trx_order_elevation.index');
|
||||
}
|
||||
|
||||
// Default redirection (optional)
|
||||
return '/login';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* login admin
|
||||
*
|
||||
* @param Request $request
|
||||
* @return void
|
||||
*/
|
||||
public function login(Request $request)
|
||||
{
|
||||
// Validate Login Data
|
||||
$request->validate([
|
||||
'email' => 'required|max:50',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
// Attempt to login
|
||||
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
|
||||
session()->flash('success', 'Successully Logged in !');
|
||||
Session::put('current_guard', 'admin');
|
||||
return redirect()->route('admin.dashboard');
|
||||
} else if (Auth::guard('admin')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
|
||||
session()->flash('success', 'Successully Logged in !');
|
||||
Session::put('current_guard', 'admin');
|
||||
return redirect()->route('admin.dashboard');
|
||||
|
||||
}else if (Auth::guard('web')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
|
||||
session()->flash('success', 'Successully Logged in !');
|
||||
Session::put('current_guard', 'web');
|
||||
return redirect()->route('admin.dashboard');
|
||||
}else if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
|
||||
session()->flash('success', 'Successully Logged in !');
|
||||
Session::put('current_guard', 'web');
|
||||
return redirect()->route('admin.dashboard');
|
||||
}
|
||||
// error
|
||||
session()->flash('error', 'Invalid email and password..');
|
||||
return back();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* logout admin guard
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
try{
|
||||
Auth::guard('admin')->logout();
|
||||
return redirect()->route('admin.login');
|
||||
|
||||
}catch (Exception $e) {
|
||||
Auth::guard('web')->logout();
|
||||
return redirect()->route('admin.login');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Backend\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Backend;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Admin;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
|
||||
return view(
|
||||
'backend.pages.dashboard.index',
|
||||
[
|
||||
'total_admins' => Admin::count(),
|
||||
'total_roles' => Role::count(),
|
||||
'total_permissions' => Permission::count(),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Backend;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MenuRoleController extends Controller
|
||||
{
|
||||
public function index($roleId)
|
||||
{
|
||||
// Ambil semua data dari tabel menus
|
||||
$menus = DB::table('menus')
|
||||
->orderBy('parent_id', 'ASC')
|
||||
->orderBy('order', 'ASC')
|
||||
->get();
|
||||
|
||||
$savedMenuIds = DB::table('role_menu')
|
||||
->where('role_id', $roleId)
|
||||
->pluck('menu_id')
|
||||
->toArray();
|
||||
|
||||
|
||||
// Jika $savedMenuIds null, set ke array kosong
|
||||
if (is_null($savedMenuIds)) {
|
||||
$savedMenuIds = [];
|
||||
}
|
||||
|
||||
// Membentuk struktur tree
|
||||
$menuTree = $this->buildTree($menus, $savedMenuIds);
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'Assign Role Menu',
|
||||
'sub_title' => 'Assign Role in Menu',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view('backend.pages.menurole.index', [
|
||||
'menuTree' => $menuTree,
|
||||
'pageInfo' => $pageInfo,
|
||||
'role_id' => $roleId
|
||||
]);
|
||||
}
|
||||
|
||||
private function buildTree($menus, $savedMenuIds, $parentId = 0)
|
||||
{
|
||||
$tree = [];
|
||||
foreach ($menus as $menu) {
|
||||
if ($menu->parent_id == $parentId) {
|
||||
$children = $this->buildTree($menus, $savedMenuIds, $menu->id);
|
||||
|
||||
$node = [
|
||||
'id' => $menu->id,
|
||||
'text' => $menu->title,
|
||||
'attributes' => ['url' => $menu->url],
|
||||
'checked' => in_array($menu->id, $savedMenuIds)
|
||||
];
|
||||
|
||||
if ($children) {
|
||||
$node['children'] = $children;
|
||||
}
|
||||
|
||||
$tree[] = $node;
|
||||
}
|
||||
}
|
||||
return $tree;
|
||||
}
|
||||
|
||||
public function saveMenu(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'menu_ids' => 'required',
|
||||
'role_id' => 'required|integer'
|
||||
]);
|
||||
$selectedMenuIds = json_decode($request->input('menu_ids', '[]'));
|
||||
$roleId = $request->input('role_id');
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
DB::table('role_menu')->where('role_id', $roleId)->delete();
|
||||
$dataToInsert = [];
|
||||
foreach ($selectedMenuIds as $menuId) {
|
||||
$results = DB::select('SELECT parent_id FROM menus WHERE id = ?', [$menuId]);
|
||||
if($results[0]->parent_id){ //jika memiliki parent_id, insert juga
|
||||
$dataToInsert[] = [
|
||||
'menu_id' => $results[0]->parent_id,
|
||||
'role_id' => $roleId
|
||||
];
|
||||
}
|
||||
$dataToInsert[] = [
|
||||
'menu_id' => $menuId,
|
||||
'role_id' => $roleId
|
||||
];
|
||||
}
|
||||
|
||||
$dataToInsert = array_unique(array_map('serialize', $dataToInsert));
|
||||
$dataToInsert = array_map('unserialize', $dataToInsert);
|
||||
|
||||
DB::table('role_menu')->insert($dataToInsert);
|
||||
DB::commit();
|
||||
return response()->json(['success' => true], 200);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json(['success' => false, 'error' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Backend;
|
||||
|
||||
use App\User;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\RoleRequest;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
|
||||
class RolesController extends Controller
|
||||
{
|
||||
public function index(): Renderable
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.view']);
|
||||
$pageInfo = [
|
||||
'title' => 'List Roles',
|
||||
'sub_title' => 'List All User Roles',
|
||||
'path' => url()->current()
|
||||
];
|
||||
return view('backend.pages.roles.index', [
|
||||
'roles' => Role::all(), 'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(): Renderable
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.create']);
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'Create Roles',
|
||||
'sub_title' => 'Create User Roles',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view('backend.pages.roles.create', [
|
||||
'all_permissions' => Permission::all(),
|
||||
'permission_groups' => User::getpermissionGroups(),
|
||||
'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(RoleRequest $request): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.create']);
|
||||
|
||||
// Process Data.
|
||||
$role = Role::create(['name' => $request->name, 'guard_name' => 'admin']);
|
||||
|
||||
// $role = DB::table('roles')->where('name', $request->name)->first();
|
||||
$permissions = $request->input('permissions');
|
||||
|
||||
if (!empty($permissions)) {
|
||||
$role->syncPermissions($permissions);
|
||||
}
|
||||
|
||||
session()->flash('success', 'Role has been created.');
|
||||
return redirect()->route('admin.roles.index');
|
||||
}
|
||||
|
||||
public function edit(int $id): Renderable|RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.edit']);
|
||||
|
||||
$role = Role::findById($id, 'admin');
|
||||
if (!$role) {
|
||||
session()->flash('error', 'Role not found.');
|
||||
return back();
|
||||
}
|
||||
|
||||
$pageInfo = [
|
||||
'title' => 'Create Roles',
|
||||
'sub_title' => 'Create User Roles',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view('backend.pages.roles.edit', [
|
||||
'role' => $role,
|
||||
'all_permissions' => Permission::all(),
|
||||
'permission_groups' => User::getpermissionGroups(),
|
||||
'pageInfo' => $pageInfo
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(RoleRequest $request, int $id): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.edit']);
|
||||
|
||||
$role = Role::findById($id, 'admin');
|
||||
if (!$role) {
|
||||
session()->flash('error', 'Role not found.');
|
||||
return back();
|
||||
}
|
||||
|
||||
$permissions = $request->input('permissions');
|
||||
if (!empty($permissions)) {
|
||||
$role->name = $request->name;
|
||||
$role->save();
|
||||
$role->syncPermissions($permissions);
|
||||
}
|
||||
|
||||
session()->flash('success', 'Role has been updated.');
|
||||
return back();
|
||||
}
|
||||
|
||||
public function destroy(int $id): RedirectResponse
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['role.delete']);
|
||||
|
||||
$role = Role::findById($id, 'admin');
|
||||
if (!$role) {
|
||||
session()->flash('error', 'Role not found.');
|
||||
return back();
|
||||
}
|
||||
|
||||
$role->delete();
|
||||
session()->flash('success', 'Role has been deleted.');
|
||||
return redirect()->route('admin.roles.index');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user