<?php
namespace App\Http\Controllers;
use App\Helpers\RoleHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Illuminate\Routing\UrlGenerator;
class RoleController extends Controller
{
/**
* Display a listing of the resource.
*/
public $breadcrumbs;
public $menu = "role";
public function __construct(UrlGenerator $urlGenerator)
{
$this->breadcrumbs = [
['title' => 'Home', 'url' => $urlGenerator->route('dashboard')],
['title' => 'Pengaturan Aplikasi', 'url' => "#"],
['title' => 'Role & Permission', 'url' => $urlGenerator->route('role.index')],
];
}
public function index()
{
if(!Auth()->user()->can('view '.$this->menu)){
return back()->with('error', 'Anda Tidak Memiliki Hak Akses Untuk Membuka Halaman Ini');
}
$breadcrumbs = $this->breadcrumbs;
$title = "Role & Permission";
$url = "role";
$menu = $this->menu;
$datas = Role::all();
return view('pages.role.index', compact('title', 'url', 'menu', 'datas', 'breadcrumbs'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
if(!Auth()->user()->can('create '.$this->menu)){
return back()->with('error', 'Anda Tidak Memiliki Hak Akses Untuk Membuka Halaman Ini');
}
$breadcrumbs = $this->breadcrumbs;
$title = "Role & Permission";
$url = "role";
$menu = $this->menu;
$permissions = RoleHelper::permissions();
$datas = Role::all();
return view('pages.role.create', compact('title', 'url', 'menu', 'datas', 'permissions', 'breadcrumbs', 'permissions'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
if(!Auth()->user()->can('create '.$this->menu)){
return back()->with('error', 'Anda Tidak Memiliki Hak Akses Untuk Membuka Halaman Ini');
}
$request->validate([
'name' => 'required|string|unique:roles,name',
'permissions' => 'required|array'
]);
foreach ($request->permissions as $key => $value) {
Permission::firstOrCreate(['name' => $value]);
}
DB::beginTransaction();
try {
$role = Role::create([
'name' => $request->name
]);
$role->syncPermissions($request->permissions);
DB::commit();
return redirect()->route('role.index')->with('success','Berhasil menambah role');
} catch (\Throwable $th) {
//throw $th;
DB::rollback();
Log::error($th);
return back()->with('error','Gagal menambah role : ' . $th->getMessage())->withInput();
}
}
/**
* Display the specified resource.
*/
public function show(Role $role)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Role $role)
{
if(!Auth()->user()->can('edit '.$this->menu)){
return back()->with('error', 'Anda Tidak Memiliki Hak Akses Untuk Membuka Halaman Ini');
}
$breadcrumbs = $this->breadcrumbs;
$title = "Role & Permission";
$url = "role";
$menu = $this->menu;
$permissions = RoleHelper::permissions();
$datas = Role::all();
return view('pages.role.edit', compact('title', 'url', 'menu', 'datas', 'permissions', 'role', 'breadcrumbs'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Role $role)
{
if(!Auth()->user()->can('edit '.$this->menu)){
return back()->with('error', 'Anda Tidak Memiliki Hak Akses Untuk Membuka Halaman Ini');
}
$request->validate([
'name' => 'required|string|unique:roles,name,'.$role->id,
'permissions' => 'required|array'
]);
foreach ($request->permissions as $key => $value) {
Permission::firstOrCreate(['name' => $value]);
}
DB::beginTransaction();
try {
$role->update([
'name' => $request->name
]);
$role->syncPermissions($request->permissions);
DB::commit();
return redirect()->route('role.index')->with('success','Berhasil mengubah role');
} catch (\Throwable $th) {
//throw $th;
DB::rollback();
Log::error($th);
return back()->with('error','Gagal mengubah role : ' . $th->getMessage())->withInput();
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Role $role)
{
if(auth()->user()->id == $role->id){
return redirect()->route('role.index')->with('error','Tidak dapat menghapus role yang sedang login');
}
DB::beginTransaction();
try {
$role->delete();
DB::commit();
return redirect()->route('role.index')->with('success','Berhasil menghapus role');
} catch (\Throwable $th) {
//throw $th;
DB::rollback();
Log::error($th);
return redirect()->route('role.index')->with('error','Gagal menghapus role : ' . $th->getMessage());
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]