File: /var/www/html/dashboard.orbiwheels.com/app/Http/Controllers/Admin/RolesController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
use Yajra\DataTables\DataTables;
use Spatie\Permission\Models\Role;
class RolesController extends Controller
{
public function index(Request $request){
if (!auth()->user()->can('role.view')) {
abort(403, 'You do not have permission to view roles.');
}
if($request->ajax()){
$roles = Role::query()->orderBy('id', 'desc');
return DataTables::of($roles)
->addColumn('action', function ($item) {
if($item->id != 1){
$buttons = '<div class="table-actions d-flex">';
if (auth()->user()->can('role.edit')) {
$buttons .= '<a href="'.route('admin.roles.permission', $item->id).'" class="btn btn-default btn-sm" title="Assign permissions"><i class="fa fa-tag"></i></a>';
}
if (auth()->user()->can('role.edit')) {
$buttons .= '<a href="'.route('admin.roles.edit', $item->id).'" class="btn btn-default btn-sm" title="Edit"><i class="fa fa-edit"></i></a>';
}
if (auth()->user()->can('role.delete')) {
$buttons .= '<a href="javascript:void(0);" class="btn btn-default btn-sm delete" data-url="'.route('admin.roles.delete', $item->id).'" title="Delete"><i class="fa fa-trash"></i></a>';
}
$buttons .= '</div>';
return $buttons;
}else{
return "";
}
})
->rawColumns(['action'])
->make(true);
}
return view('admin.roles.index');
}
public function store(Request $request){
$request->validate([
'name' => 'required|string|unique:roles,name'
]);
Role::create([
'name' => $request->name,
]);
return redirect()->route('admin.roles.index')->with('success', 'Role created successfully!');
}
public function edit(Request $request, $id){
if (!auth()->user()->can('role.edit')) {
abort(403, 'You do not have permission to edit roles.');
}
$roles = Role::get();
$role = Role::findById($id);
if(isset($role)){
return view('admin.roles.edit', compact('roles', 'role'));
}
return redirect()->back()->with('error', 'Role not found!');
}
public function update(Request $request, $id){
$request->validate([
'name' => 'required|string|unique:roles,name,'. $id
]);
$role = Role::findById($id);
if(isset($role)){
$role->update(['name' => $request->name]);
return redirect()->route('admin.roles.index')->with('success', 'Role updated successfully!');
}
return redirect()->back()->with('error', 'Role not found!');
}
public function delete(Request $request, $id){
$role = Role::find($id);
if(!isset($role)){
return response()->json([
'status' => false,
'message' => 'Role not found!',
]);
}
$role->delete();
return response()->json([
'status' => true,
'message' => 'Role deleted successfully!',
]);
}
public function permission(Request $request, $id){
$role = Role::findById($id);
$permissions = Permission::all();
return view('admin.roles.permission', compact('role', 'permissions'));
}
public function permissionAssign(Request $request, $id){
$role = Role::findById($id);
$permissions = $request->input('permissions', []); // e.g., ['user.create', 'transporter.view']
$role->syncPermissions($permissions); // replaces existing ones
return back()->with('success', 'Permissions updated successfully.');
}
}