Files
expense/app/Http/Controllers/Backend/RolesController.php
T
2024-12-12 18:18:26 +07:00

124 lines
3.6 KiB
PHP

<?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 redirect()->route('admin.roles.index');
}
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');
}
}