HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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.');
    }

}