OwlCyberSecurity - MANAGER
Edit File: RolesController.php
<?php namespace App\Http\Controllers; use App\Http\Requests\AddRoleRequest; use App\Http\Requests\UpdateRoleRequest; use App\Models\Role; use Illuminate\Http\Request; use App\Models\RolePermission; use Illuminate\Support\Facades\DB; use Throwable; class RolesController extends Controller { public function index() { $roles = Role::all(); return view('roles.index', ['title' => 'Roles Lising', 'roles' => $roles]); } // Returns roles listing public function roles_listing(Request $request) { // Get required data $draw = $request->get('draw'); $start = $request->get('start'); $length = $request->get('length'); $orderArray = $request->get('order'); $orderBy = $orderArray[0]['column']; $orderDir = $orderArray[0]['dir']; $searchArray = $request->get('search'); $searchValue = $searchArray['value']; // preparing select query $q = Role::selectRaw(' id, name, IF(status = 0 , "Active" , "Inactive") as status_formated, DATE_FORMAT(created_at , "%d/%m/%Y") as created_at_formated '); $totalRole = $q->count(); // search functionality if (isset($searchValue) && !empty($searchValue)) { $formated_search = preg_replace('/[^\sA-Za-z0-9@.\/\-]/', '', strtolower($searchValue)); $q->whereRaw('( name LIKE "%' . $formated_search . '%" OR IF(status = 0 , "Active" , "Inactive") LIKE "%' . $formated_search . '%" OR DATE_FORMAT(created_at , "%d/%m/%Y") LIKE "%' . $formated_search . '%" )'); } // column ordering if (isset($orderBy) && isset($orderDir)) { $columns = [ 1 => 'name', 4 => 'status_formated', 5 => 'created_at_formated', ]; if (array_key_exists($orderBy, $columns)) { $q->orderBy($columns[$orderBy], $orderDir); } } // filtered cound $filteredRoles = $q->count(); // requested data size $records = $q->skip($start)->take($length)->get(); // formating data $rolesData = []; foreach ($records as $r) { $rolesData[] = [ 'checkbox' => '<input type="checkbox" name="roleCheckbox' . $r->id . '" id="roleCheckbox' . $r->id . '" class="rolesCheckboxes" value="' . $r->id . '">', 'name' => $r->name, 'status' => $r->status_formated, 'created_at' => $r->created_at_formated, 'action' => '<a href="' . route('get_roles_edit.edit_roles', ['id' => $r->id]) . '"><button class="custom-blue-btn w-100">Edit</button></a>', ]; } // returning response return response()->json([ "draw" => intval($draw), "iTotalRecords" => $totalRole, "iTotalDisplayRecords" => $filteredRoles, "aaData" => $rolesData ], 200); } // Returns add view public function add() { // all roles $role_permissions = RolePermission::get(); $RolePermissions = []; foreach ($role_permissions as $perm) { $RolePermissions[$perm->group][] = [ 'id' => $perm->id, 'name' => $perm->name, 'title' => $perm->title ]; } // dd($RolePermissions); return view('roles.add', ['title' => 'Add Role', 'role_permissions' => $RolePermissions]); } // add new role public function store(AddRoleRequest $request) { // dd($request->get('permission_ids')); try { $role = new Role(); $role->name = $request->get('name'); $role->guard_name = 'web'; $role->status = $request->get('status'); $role->created_at = new \DateTime(); $role->updated_at = null; $role->save(); $PermissionData = []; if ($request->has('permission_ids') && count($request->get('permission_ids')) > 0) { foreach ($request->get('permission_ids') as $perm_id) { $PermissionData[] = [ 'permission_id' => $perm_id, 'role_id' => $role->id ]; } } if (count($PermissionData) > 0) { DB::table('role_has_permissions')->insert($PermissionData); app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions(); } return redirect('admin/roles')->with('success', 'Role created.'); } catch (Throwable $th) { return redirect('admin/roles')->with('message', $th->getMessage()); } } // Returns edit view public function edit($id) { // requested role data with all roles if ($id > 0) { if ($id == 1) { return redirect('admin/roles')->with('message', 'You can not edit admin permissions'); } $role = Role::where('id', $id)->first(); if (!empty($role)) { // all roles $role_permissions = RolePermission::selectRaw('permissions.id, permissions.name, permissions.title, permissions.group, role_has_permissions.permission_id') ->leftjoin('role_has_permissions', 'role_has_permissions.permission_id', '=', DB::raw('permissions.id AND role_has_permissions.role_id = ' . $id)) ->get(); $RolePermissions = []; foreach ($role_permissions as $perm) { $RolePermissions[$perm->group][] = [ 'id' => $perm->id, 'name' => $perm->name, 'title' => $perm->title, 'permission_id' => $perm->permission_id ]; } // dd($RolePermissions); return view('roles.edit', ['role' => $role, 'role_permissions' => $RolePermissions, 'title' => 'Edit Role']); } } return redirect('login'); } // Update role public function update(UpdateRoleRequest $request, $id) { try { if ($id > 0) { if ($id == 1) { return redirect('admin/roles')->with('message', 'You can not edit admin permissions'); } // getting role $role = Role::where('id', $id)->first(); if (!empty($role)) { // assigning changes $role->name = $request->get('name'); $role->status = $request->get('status'); $role->updated_at = new \DateTime(); $role->update(); // role updated DB::table('role_has_permissions')->where('role_id', $id)->delete(); $PermissionData = []; if ($request->has('permission_ids') && count($request->get('permission_ids')) > 0) { foreach ($request->get('permission_ids') as $perm_id) { $PermissionData[] = [ 'permission_id' => $perm_id, 'role_id' => $role->id ]; } } if (count($PermissionData) > 0) { DB::table('role_has_permissions')->insert($PermissionData); } app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions(); return redirect()->back()->with('success', 'Role updated.'); } return redirect()->back()->with('message', 'Role not found.'); } } catch (Throwable $th) { return redirect()->back()->with('message', $th->getMessage()); } } // delete selected role ajax function public function delete(Request $request) { DB::beginTransaction(); try { $ids = is_array($request->get('ids')) ? $request->get('ids') : []; if (count($ids)) { // Search value and delete if (($key = array_search(1, $ids)) !== false) { unset($ids[$key]); } Role::whereIn('id', $ids)->delete(); DB::commit(); return response()->json(['success' => true, 'message' => 'Role' . (count($ids) > 1 ? "s" : "") . ' deleted successfully.'], 200); } return response()->json(['message' => 'No role selected'], 422); } catch (Throwable $th) { DB::rollBack(); return response()->json(['message' => $th->getMessage()], 422); } } }